深度学习地震勘探入门

简介

我们在论文中提供了一个例子,但是由于数据不容易下载,很多同学没有测试成功,这个帖子中我们将这个例子进行了详细注释,同时提供手把手教学,数据也上传到了百度网盘。如果大家觉得有用,就引用我们的文章吧。

文章引用:S. Yu, J. Ma*, Deep learning for geophysics: current and future trends, Reviews of Geophysics, 2021, 59 (3), e2021RG000742.

数据下载链接:链接:https://pan.baidu.com/s/1pS3ap4IUg2Zi5hcEwZldCw 提取码:zs8k (800M)

Gitee代码链接:https://gitee.com/sevenysw/deep-learning-geophysics

论文中的代码仅用15行(核心代码,不包括可视化)就实现了数据的加载,训练和测试(不包括训练数据的生成),我们选择使用Keras来实现这样紧凑结构的框架。Keras是TensorFlow、Theano等框架的高级封装。Keras的安装有两种简单的方法,第一种是安装tensorflow,通过tf.keras来调用(本代码的情况);第二种是分别安装tensorflow和keras,可以直接通过keras来调用。

测试的环境配置

环境1:

显卡:Nvidia 1080Ti,驱动版本496.13

软件:Windows 10,Cuda 10.0,VSCode 1.62.2,tensorflow_gpu 1.15.0 (或者2.1.0),python3.7

环境2:

参考Issue

显卡:Nvidia 3080Ti,驱动版本470.86

软件:Ubuntu 18.04, Cuda 11.0, tensorflow_gpu 2.6.1, python 3.6.13, conda 4.11.0

1,修改code.py为其它名字

2,pip uninstall keras

pip install keras==2.6.0

该程序对不同环境的容忍度比较大,所以不必完全一样。

环境配置步骤

1,python环境管理软件

安装anaconda:https://www.anaconda.com/products/individual

2,找到所需cuda安装,比如10.0:

https://developer.nvidia.com/cuda-10.0-download-archive

3,创建虚拟环境

conda可以配置源,加速下载包,https://mirror.tuna.tsinghua.edu.cn/help/anaconda/

在命令行cmd(ubuntu中为terminal)中运行

conda create -n tfv2 python=3.7

开启虚拟环境

conda activate tfv2

4,安装tensorflow

在安装之前可以切换源:https://blog.csdn.net/afeiqiang/article/details/108257584

加速安装,而且更稳定

Windows用户:c:\Users\你的用户名\pip\pip.ini,没有就新建一个,

Linux用户:修改 ~/.pip/pip.conf 文件,没有就新建一个,写入以下内容:

[global]
index-url = http://mirrors.aliyun.com/pypi/simple/ *# 根据需要选清华源或者阿里源*
[install]
trusted-host=mirrors.aliyun.com

安装依赖包numpy, matplotlib:

pip install numpy matplotlib

然后开始安装:

pip install --upgrade tensorflow_gpu

如若要指定版本,则可以用

pip install --upgrade tensorflow_gpu==2.1.0

5,下载代码

git clone https://gitee.com/sevenysw/deep-learning-geophysics.git

修改code.py 中noise_dataset.h5的绝对目录位置

运行代码:

python code.py

不出意外,代码就可以正常运行了,整个过程在1080ti下大概要25分钟(共50次迭代)。

代码说明

#加载相关用到的包
import h5py
import matplotlib.pyplot as plt
from tensorflow.keras.layers import Input,Conv2D,BatchNormalization,ReLU,Subtract
from tensorflow.keras.models import Model
#数据读取,关于noise_dataset.h5的生成方法,我们在最后说明
ftrain = h5py.File(r'E:\Datasets\noise_dataset.h5','r')
#从h5py转换成numpy格式,numpy格式keras是可以直接处理的
#X,Y的维度为(12800,64,64,1),11800个训练样本,1000个测试样本
#X 为含噪数据,Y为干净数据
X, Y=ftrain['/X'][()],ftrain['/Y'][()]
#训练样本的展示
for i in range(4):plt.subplot(2,4,i+1);plt.imshow(X[i,:,:,0],vmin=-2,vmax=2)plt.subplot(2,4,i+5);plt.imshow(Y[i,:,:,0],vmin=-2,vmax=2)
plt.show()
#创建神经网络,初始化输入维度,建立输入输出的关系,整个过程使用“符号化”的表示方法
#使用卷积神经网络,3x3的卷积核,共17个卷积层,使用了BN层
input = Input(shape=(None,None,1)) #输入层
x=Conv2D(64,3,padding='same',activation='relu')(input) #卷积层
for i in range(15):x= Conv2D(64,3,padding='same',use_bias = False)(x) #卷积层x= ReLU()(BatchNormalization(axis=3,momentum=0.0,epsilon=0.0001)(x)) #ReLU和BN层
x= Conv2D(1,3,padding='same',use_bias = False)(x) #最后一层卷积层
#建立输入与输出关系的网络,注意此时使用的输出为输入与输出之差,即学习残差
model = Model(inputs=input,outputs=Subtract()([input,x]))
#给定损失函数MSE,优化算法RMSprop
model.compile(optimizer="rmsprop",loss="mean_squared_error")
#开始进行训练,每次使用32个样本,全部循环50次,每次训练样本打乱数据
model.fit(X[:-1000],Y[:-1000],batch_size=32,epochs=50,shuffle=True)
#进行测试
Y_ = model.predict(X[-1000:])
#训练结果的可视化
for i in range(4):plt.subplot(2,4,i+1);plt.imshow(X[-1000+i,:,:,0],vmin=-2,vmax=2)plt.subplot(2,4,i+5);plt.imshow(Y_[i,:,:,0],vmin=-2,vmax=2)
plt.show()

训练数据如下:

预测结果如下:

训练数据

训练数据的生成基本思路就是利用Matlab的h5write函数将数组转换成h5格式,需要注意的是数组维度的排序,Matlab和python是有一些区别的。

另外我们将数据生成和网络训练都写到一起,使用pytorch,在https://github.com/sevenysw/python_segy

深度学习地震勘探入门相关推荐

  1. 150页书籍《PyTorch 深度学习快速入门指南》附PDF电子版

    为什么说是极简教程,首先本书只涵盖了150页.内容比较精简,特别适合作为 PyTorch 深度学习的入门书籍.为什么这么说呢?因为很多时候,一份厚重的书籍往往会削弱我们学习的积极性,在学习一门新的语言 ...

  2. 深度学习动手入门:GitHub上四个超棒的TensorFlow开源项目

    原文:http://www.techweb.com.cn/news/2017-07-31/2566452.shtml 深度学习动手入门:GitHub上四个超棒的TensorFlow开源项目 2017. ...

  3. 深度学习---从入门到放弃(九)RNN入门

    深度学习-从入门到放弃(九)RNN入门 1.RNN简介 RNN(Recurrent Neural Network)是一类用于处理序列数据的神经网络.回想一下我们之前说到过的CNN,它可以通过在空间上共 ...

  4. 深度学习---从入门到放弃(一)pytorch基础

    深度学习-从入门到放弃(一)pytorch Tensor 类似于numpy的array,pandas的dataframe:在pytorch里的数据结构是tensor,即张量 tensor简单操作 1. ...

  5. 【机器学习】机器学习和深度学习概念入门

    机器学习和深度学习概念入门(上) 作者:谭东  来源:机器学习算法与自然语言处理 目  录 1   人工智能.机器学习.深度学习三者关系 2   什么是人工智能 3  什么是机器学习 4  机器学习之 ...

  6. 深度学习小白入门教程-基础环境篇

    深度学习小白入门教程-基础环境篇 如有图片显示失败,请回小主主页查看~ Anaconda 安装包下载方式一:官网(科学上网比较慢,不推荐) 安装包下载方式二:清华镜像(推荐) 具体安装步骤(跟着箭头来 ...

  7. 【深度学习】入门理解ResNet和他的小姨子们(一)---ResNet

    2015年由He KaiMing 大神 提出的ResNet现在是一种经典模型.在这之前,虽然VGG的深度已经高达19层了,但是152层的ResNet真的让我们目瞪口呆. ResNet这篇文章则是CVP ...

  8. 深度学习 — — PyTorch入门(二)

    在深度学习--PyTorch入门(一)中我们介绍了构建网络模型和加载数据的内容,本篇将继续介绍如何完成对模型的训练. 训练:更新网络权重 构建网络结构和加载完数据集之后,便可以开始进行网络权重的训练. ...

  9. 《Keras深度学习:入门、实战与进阶》之印第安人糖尿病诊断

    本文摘自<Keras深度学习:入门.实战与进阶>. 1.数据理解 本节使用Pima Indians糖尿病发病情况数据集.该数据集最初来自国家糖尿病/消化/肾脏疾病研究所.数据集的目标是基于 ...

最新文章

  1. 框架之---Django
  2. VC实现HTTP协议的GET和POST方法
  3. 你绝对能懂的“机器学习”(三)
  4. 年度布道师颁奖|盘点2020年网易智企的布道先锋们
  5. 无极绳连续牵引绞车_可视化无极绳绞车保护控制装置
  6. java 生产者消费者_基于JAVA的生产者消费者问题
  7. mysql dw解决方案_MySQL 的 DW 解决方案(MySQL + Infobright)
  8. qnap nas web php,如何在QNAP NAS上建立并使用 iSCSI Target
  9. CVPR 2020 论文大盘点-人体姿态估计与动作捕捉篇
  10. php的?php ?标签匹配
  11. Android----Allapps加载流程详解【AndroidICS4.0——Launcher系列五】
  12. wxpython画表格代码
  13. linux7.3系统如何修改系统时间,两招修改​Centos7 系统时区!
  14. 三星java游戏下载_轻松游戏 三星Z500安装java游戏详细教程
  15. JAVA之stream汪文君_Java8新特性之Stream API
  16. 资深Web技术专家曹刘阳:2016年前端技术观察
  17. codevs 2905 足球晋级
  18. 初创公司多产品线分红篇
  19. 一切皆socket!网络编程:三次握手 四次握手 与socket函数的关系
  20. 以色列农业里的生态性-丰收节贸易会:在死海谋定活水

热门文章

  1. Codeforces 356D Bacterial Melee dp
  2. 卧槽!竟然可以直接白嫖 Github Action 的 2C7G 服务器。。
  3. 解决redis连接错误:MISCONF Redis is configured to save RDB snapshots, but it is currently not able to...
  4. Elixir: 魔术符号
  5. UE4实现生化危机7影子谜题
  6. Ubuntu 16.04设置静态IP地址
  7. ZT 头文件包含其实是一想很烦琐的工作 第一个原则应该是,如果可以不包含头文件...
  8. Caché程序员必须知道符号与缩写 第二章 ObjectScript中使用的缩写
  9. 【0】uC/OS-III应用开发————uC/OS-III的几个重要特性
  10. 硬盘分区文件格式变成RAW,点击就显示未格式化解决方法(小莫)