深度学习地震勘探入门
深度学习地震勘探入门
简介
我们在论文中提供了一个例子,但是由于数据不容易下载,很多同学没有测试成功,这个帖子中我们将这个例子进行了详细注释,同时提供手把手教学,数据也上传到了百度网盘。如果大家觉得有用,就引用我们的文章吧。
文章引用: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
深度学习地震勘探入门相关推荐
- 150页书籍《PyTorch 深度学习快速入门指南》附PDF电子版
为什么说是极简教程,首先本书只涵盖了150页.内容比较精简,特别适合作为 PyTorch 深度学习的入门书籍.为什么这么说呢?因为很多时候,一份厚重的书籍往往会削弱我们学习的积极性,在学习一门新的语言 ...
- 深度学习动手入门:GitHub上四个超棒的TensorFlow开源项目
原文:http://www.techweb.com.cn/news/2017-07-31/2566452.shtml 深度学习动手入门:GitHub上四个超棒的TensorFlow开源项目 2017. ...
- 深度学习---从入门到放弃(九)RNN入门
深度学习-从入门到放弃(九)RNN入门 1.RNN简介 RNN(Recurrent Neural Network)是一类用于处理序列数据的神经网络.回想一下我们之前说到过的CNN,它可以通过在空间上共 ...
- 深度学习---从入门到放弃(一)pytorch基础
深度学习-从入门到放弃(一)pytorch Tensor 类似于numpy的array,pandas的dataframe:在pytorch里的数据结构是tensor,即张量 tensor简单操作 1. ...
- 【机器学习】机器学习和深度学习概念入门
机器学习和深度学习概念入门(上) 作者:谭东 来源:机器学习算法与自然语言处理 目 录 1 人工智能.机器学习.深度学习三者关系 2 什么是人工智能 3 什么是机器学习 4 机器学习之 ...
- 深度学习小白入门教程-基础环境篇
深度学习小白入门教程-基础环境篇 如有图片显示失败,请回小主主页查看~ Anaconda 安装包下载方式一:官网(科学上网比较慢,不推荐) 安装包下载方式二:清华镜像(推荐) 具体安装步骤(跟着箭头来 ...
- 【深度学习】入门理解ResNet和他的小姨子们(一)---ResNet
2015年由He KaiMing 大神 提出的ResNet现在是一种经典模型.在这之前,虽然VGG的深度已经高达19层了,但是152层的ResNet真的让我们目瞪口呆. ResNet这篇文章则是CVP ...
- 深度学习 — — PyTorch入门(二)
在深度学习--PyTorch入门(一)中我们介绍了构建网络模型和加载数据的内容,本篇将继续介绍如何完成对模型的训练. 训练:更新网络权重 构建网络结构和加载完数据集之后,便可以开始进行网络权重的训练. ...
- 《Keras深度学习:入门、实战与进阶》之印第安人糖尿病诊断
本文摘自<Keras深度学习:入门.实战与进阶>. 1.数据理解 本节使用Pima Indians糖尿病发病情况数据集.该数据集最初来自国家糖尿病/消化/肾脏疾病研究所.数据集的目标是基于 ...
最新文章
- 框架之---Django
- VC实现HTTP协议的GET和POST方法
- 你绝对能懂的“机器学习”(三)
- 年度布道师颁奖|盘点2020年网易智企的布道先锋们
- 无极绳连续牵引绞车_可视化无极绳绞车保护控制装置
- java 生产者消费者_基于JAVA的生产者消费者问题
- mysql dw解决方案_MySQL 的 DW 解决方案(MySQL + Infobright)
- qnap nas web php,如何在QNAP NAS上建立并使用 iSCSI Target
- CVPR 2020 论文大盘点-人体姿态估计与动作捕捉篇
- php的?php ?标签匹配
- Android----Allapps加载流程详解【AndroidICS4.0——Launcher系列五】
- wxpython画表格代码
- linux7.3系统如何修改系统时间,两招修改​Centos7 系统时区!
- 三星java游戏下载_轻松游戏 三星Z500安装java游戏详细教程
- JAVA之stream汪文君_Java8新特性之Stream API
- 资深Web技术专家曹刘阳:2016年前端技术观察
- codevs 2905 足球晋级
- 初创公司多产品线分红篇
- 一切皆socket!网络编程:三次握手 四次握手 与socket函数的关系
- 以色列农业里的生态性-丰收节贸易会:在死海谋定活水
热门文章
- Codeforces 356D Bacterial Melee dp
- 卧槽!竟然可以直接白嫖 Github Action 的 2C7G 服务器。。
- 解决redis连接错误:MISCONF Redis is configured to save RDB snapshots, but it is currently not able to...
- Elixir: 魔术符号
- UE4实现生化危机7影子谜题
- Ubuntu 16.04设置静态IP地址
- ZT 头文件包含其实是一想很烦琐的工作 第一个原则应该是,如果可以不包含头文件...
- Caché程序员必须知道符号与缩写 第二章 ObjectScript中使用的缩写
- 【0】uC/OS-III应用开发————uC/OS-III的几个重要特性
- 硬盘分区文件格式变成RAW,点击就显示未格式化解决方法(小莫)