上一节课,我们给大家详细讲解了自编码全连接神经网络的用法,相信大家对深度学习整个流程比较了解了。
但是全连接神经网络处理复杂的二维数据效果还是不够理想,特别是处理复杂的地震数据效果不佳。今天这节课我们带领大家一起来学习卷积神经网络,看看这款技术的处理能力如何。
一、自编码Mnist卷积深度学习
卷积神经网络(Constitutional Neural Networks, CNN)是在多层神经网络的基础上发展起来的针对图像等复杂信号分类和识别而特别设计的一种深度学习方法。
网络结构和前面的全连接深度学习网络没有特别大的区别,主要是中间的隐藏层从以前的全连接层变为了不同的卷积层。
卷积层的相关知识就不在这里赘述了,大家自行上网补习一下。在实际使用中,解决图像一类问题的自动编码器通常是卷积自动编码器——它们的处理能力把全连接网络更好。
1.网络结构
现在我们实现了一个卷积自动编码网络。主要使用了卷积层、最大池化层、上采样层等结构,形成镜像的关系。其中卷积和池化成对,通过层层堆叠形成了深度学习关系。
2.程序讲解
对于程序这部分,
一是卷积层均使用了卷积核为3的滤波器。这样学习的信号特征能力较强,而且减少了参数量和计算复杂度。使用padding为same,保证了训练过程中数据大小不变。
二是使用MaxPooling来提取特征,同时通过最大取值来避免图像模糊。
三是使用UpSamling来恢复图像,这里是与MaxPooling形成了配对,在下采样的时候记录max的位置,上采样的时候最大值的位置还原。
四是整个网络比较简单。整个网络还可以添加BN,dropout等等结构来优化学习效果。
3.效果检验
结果显示的代码和全连接网络的程序基本相同,不同之处在于数据不再是一维展开,而是需要变为二维的28×28×1的数据。
(1)训练结果
从训练过程来看,loss值和val_loss值持续下降并逐步收敛,证明构建的网络结构比较有效,参数设置正确。
先来看看与原图的对比效果。
上图是原图,下图是卷积神经网络处理效果图。可以看到还原的效果与原图基本无异。甚至有些细节还智能添加了缺失部分。
再来看看与全连接网络的对比效果。
上图是全连接网络处理效果,下图是卷积神经网络处理效果图。可以看到二者的处理效果都差不多。
为什么二者效果差不多呢?
因为Mnist手写体图片主要的信息就是有笔画的部分有数字,其它部分为0。这类特征的学习非常简单,无论是全连接网络还是卷积网络都能胜任。
二、自编码地震卷积深度学习
1.地震数据
下面我们来举一个地震信号处理的案例,使用上节课使用过的地震数据。
我们准备了多个地震剖面仿真数据。主要参数包括:200道,采样点751,采样率4毫秒。数据的尺寸包括751×200,701×201等。
2.程序讲解
(1)训练数据准备
为了训练地震数据,我们需要自己来准备训练集。
自己写了一个getPath的程序,用来生成训练集。这个程序比较复杂就不细讲了,最后结果就是生成了9660个64×64的地震训练数据。
这里的网络结构与Mnist卷积网络类似,但是考虑到地震信号复杂性,有四点不同。
一是数据的尺寸变为64×64的大小。
二是最后一层的激活函数为tanh,而不是前面的sigmoid。因为地震数据远比Mnist图片数据复杂,使用逻辑激活函数不能满足要求。
三是损失函数使用绝对均方差,这是为了复杂的深度学习需要。
3.结果检验
从训练过程来看,loss值持续下降并逐步收敛,证明构建的网络结构比较有效,参数设置正确。
最后来看看效果的检验。
首先,我们找到了训练集之外的另外一个工区的仿真数据。把数据进行归一化,构造为1×64×64×1的结构。
然后,我们把测试数据放入到训练好的模型进行预测处理。最后我们使用matplotlib来画出地震数据处理的效果图。
现在我们来感受一下卷积自编码的威力吧。左图是测试原图,中间图是卷积处理的结果,右边是全连接处理的结果。
从上图来看,卷积自编码几乎还原了地震信号的形态,而相比之下全连接自编码就力不从心了。
以上就是今天的全部内容,如果你想获取代码,或有问题讨论,都欢迎联系我交流。下一节,我们将讲解去噪自编码,将自编码技术应用到实际。下节课再见。
如果喜欢请点赞,或关注我交流。