卷积神经网络(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.识别效果
下面两张图显示了其中卷积层学习到的特征。
可以看到越往后,越识别到了断层的特征。
仿真数据的识别效果见下图。
可以看到主要的断层可以识别出来,但是一些比较小的断层未能识别。
具体可视化展示方法后续会介绍。
这次的课程就到这里。我们给大家讲解了为实现断层识别训练,怎样建立神经网络模型并进行训练的一套实战流程。如果大家对程序感兴趣欢迎联系我交流。再见。
扩展阅读:
网友评论