深度学习断层实战(二)——CNN神经网络模型建立(附程序)

卷积神经网络(CNN)是当今广泛使用的一种深度神经网络模型,它是在人工神经网络的基础上引入了卷积运算和采样操作,这种运算极大提高了提取信号特征的能力。与传统神经网络相比,CNN大大减少了模型的参数,网络结构也更加简单。

01 卷积神经网络断层识别原理

CNN可以看成是一个特殊的深度神经网络,最大的特点是在输入与输出层之间的隐藏层中,增加了卷积层和池化层。

这样就减少了层与层之间神经元的相互连接,降低了计算参数数量级,使得CNN较传统神经网络更加适用于图像的分类任务。

主要的CNN网络结构包括:

(1)输入层:训练数据的入口,彩色图像的通道数为3,灰度图像为1,地震数据的通道数为1。

(2)卷积层:通过多个卷积核( Conventional Kernel 或 Filter) 在输入样本上平移来提取特征,每一个特征对应一个特征映射。卷积运算的目的是使原信号特征增强,并且降低噪声。

(3)池化层:通过汇聚特征后稀疏训练参数,其目的是降低网络训练参数和网络的复杂度,防止模型结构出现过拟合。

(4)拉平层和全连接层:这是网络的输出层。拉平层将卷积池化的特征层拉平成特征向量,特征向量将作为全连接层的输入,在全连接层中经过Softmax等逻辑函数进行了分类。最后将分类的结果进行输出。

02 实战案例应用

结合前期合成的地震断层数据作为模型训练的标签数据,我们构建一个比较有代表性的CNN神经网络作为训练模型,来给大家讲解CNN断层识别模型的构建过程。

为了能够流畅的运行,建议大家使用独立的显卡,并且支持CUDA GPU加速,显存8G以上,内存64G以上。

1.加载训练集数据

我们使用前期机器自动生成的数据集,包括200个样本的训练集和20个样本的验证集,每个样本的尺寸是128*128*128。

为了提高模型鲁棒性,还可以对训练数据进行增强处理。就是在加载仿真数据后,再对训练数据进行水平翻转多次翻转,进一步增加训练样本的多样性。

使用下面的程序。

2.构建神经网络

为了构建端到端的网络训练任务,构建了一个这样的一个简单的自编码网络结构:

主要的代码包括编码和解码部分。编码部分的代码是这样的:

解码部分的代码是这样的:

训练参数部分:

由于整个地震数据中,断层部分很少,大部分都是非断层,造成了数据分布不均衡,因此这里修改了loss函数,优化了cross_entropy算法。

3.训练神经网络

整个网络训练了25个周期,每个周期训练时间3分钟左右。训练的图形是这样的:

从训练图像来看,训练曲线比较稳定,可以收敛。验证曲线不太稳定,说明模型还需要优化。

4.保存神经网络

我们可以将训练的模型保存下来,未来进行其它数据预测时可以直接调用模型。

5.识别效果

下面两张图显示了其中卷积层学习到的特征。

可以看到越往后,越识别到了断层的特征。

仿真数据的识别效果见下图。

可以看到主要的断层可以识别出来,但是一些比较小的断层未能识别。

具体可视化展示方法后续会介绍。

这次的课程就到这里。我们给大家讲解了为实现断层识别训练,怎样建立神经网络模型并进行训练的一套实战流程。如果大家对程序感兴趣欢迎联系我交流。再见。

扩展阅读:

怎样轻松入门地震勘探研究:先从地震数据处理开始

深度学习地震去噪入门(附程序)

你可能感兴趣的:(深度学习断层实战(二)——CNN神经网络模型建立(附程序))