治好白癜风需要多少钱 http://news.39.net/bjzkhbzy/180522/6273005.html上一节课,我们给大家详细讲解了自编码卷积神经网络的用法,相信大家对卷积神经网络比较了解了,也看到了卷积神经网络的优秀性能。不过很多同学都有个疑问:前面一直都是对理想数据进行处理,这样有多大用处呢?那用在实际中是怎样应用的呢?第一节课我们讲过,自编码可以用在预训练、自动创作、自动填充、去除噪声、数据降维等等方向。今天我们就从最常见的降噪这项应用开始讲解。一、降噪自动编码的由来降噪自动编码器(DenoisingAutoEncoder)最初的应用是为了让自动编码网络有更强的鲁棒性(Robust)。这是什么原理呢?就是将原始的完整数据以一定概率分布(通常使用二项分布)去擦除,然后将处理后的结果作为输入的训练数据。这样训练出来的网络抗干扰能力更强,预测的结果往往更好。就比如下图:原始的数据是x,首先我们随机的去掉了x中的两个数据形成了x’,然后我们用这个有破损(术语叫Corruputed)的数据x’作为训练数据来训练自编码网络y,训练过程中计算出的结果是z,然后将z与原始x做误差迭代不断优化网络y。最后训练出来的y就有了更好的性能。为什么训练破损的数据更能激发网络的鲁棒性呢?有论文解释说神经网络通过从破损数据中学习到有效特征数据,从而恢复完整的数据。这个训练过程是增强了神经网络特征提取的能力。就是说学习破损数据的过程相当于一个简化的PCA,本质是进行降维提取。而降维就是神经网络最擅长的工作之一。二、降噪自动编码在地震去噪领域的应用前面提到了通过训练破损的数据,可以提高自编码网络学习能力。那含有噪声的数据,也是一种破损的数据,同样可以使用自编码网络进行降噪处理。在地震勘探领域,伴随地震数据采集过程中,由于人为或环境因素的影响,不可避免地会引入随机噪声。受污染的地震资料严重影响了后续的地震资料处理和成像。因此,抑制随机噪声可以有效地提高地震资料的信噪比,有利于提高成像质量。比如我们常常会将左图的含噪数据进行降噪处理,变成右图的样子。自编码网络天生就有很强的特征信息提取能力,因此特别适合降噪的处理这一类的应用。那到底效果如何呢?我们通过案例来告诉你。三、降噪自动编码实战案例这个部分,我们带领大家来实战操作地震去噪的整个处理过程。1.网络结构网络结构这部分和前面课程是一样的。实现了一个卷积自动编码网络。主要使用了卷积层、最大池化层、上采样层等结构,形成镜像的关系。其中卷积和池化成对,通过层层堆叠形成了深度学习关系。2.数据准备我们的目标是这个工区的数据进行去噪处理。我们首先要准备训练数据集。我们准备了多个无噪声的训练数据,加上了噪声对神经网络模型进行训练。3.网络训练(1)训练数据和标签数据准备自己写了getPathAddNoise的程序,将多个地震训练数据合成了一个含噪声的训练集。这个程序比较复杂就不细讲了,最后结果就是生成了个64×64的地震训练数据。干净的地震数据是怎样加上噪声的呢?我们对干净的地震仿真数据加上随机噪声,程序是这样写的。这里的主要步骤:首先是要将地震信号归一化到-1至1的取值空间。然后加上了15%的随机噪声。(2)神经网络结构这里的神经网络结构与上节课非常类似。但有两点不同,一是优化器从adam改为了adadelta,这个优化器有个特点就是速度较快。二是loss函数改为mean_squared_error,这个损失函数在处理无异常值的情况下,效果更好。接下来我们通过30个周期迭代,让模型进行了深度的学习。这里有个很有意思的地方是,我们的训练数据和标签数据都用的是一个,就是含噪声的训练数据。这个训练方式和有监督学习不太一样。这种训练方式称为自监督学习。即我们不需要标签数据,直接从唯一的训练集中学习数据特征。为了体现自编码网络强大的学习能力,我们直接用含噪声的数据集来训练,看看它能不能从中学习到有效的信号。在整个网络的调优过程中,有以下几个经验分享给大家:一是训练数据的尺寸尽量小一些,从28至64的范围比较合适,再大的话数据量就会较大,造成训练速度较慢。二是训练数据的数量尽量多一些,训练周期长一些,这样学习质量比较高。一般来说数量在1万以上比较好,比如Mnist的训练数据是6万,训练周期在50次以上。本次教程限于原理呈现,只用了多个训练数据,训练了30个周期,还未体现自编码更好的效果。三是最后一层的激活函数为tanh,而不是前面的sigmoid。因为地震数据远比Mnist图片数据复杂,使用逻辑激活函数不能满足要求。4.结果检验从训练过程来看,loss值持续下降并逐步收敛,证明构建的网络结构比较有效,参数设置正确。现在我们来构造测试的数据。我们制作了和训练数据不同的一个测试仿真数据,然后加上了15%的随机噪声。左图是清晰数据,右图是噪声数据。程序是这样写的:首先,加载测试仿真数据。然后把数据进行归一化,加上15%的随机噪声。最后构造为1×64×64×1的结构。我们把测试数据放入到训练好的模型进行预测处理。最后我们使用matplotlib来画出地震数据处理的效果图。现在我们来看看最后的处理效果。左边是干净的原始测试信号,中间是加上了随机噪声的信号,右边是去掉噪声的信号。从上面的结果来看,这次的实验加的噪声比较大,噪声对原始信号造成了较大的干扰。神经网络模型对信号噪声去除效果比较明显。不过处理的结果对信号的还原还不是非常完美,在边缘部分还有些模糊。今天我们将自编码理论应用到了去噪的实际应用中。在处理过程中遇到的问题远多于处理理想数据。这次使用的是仿真数据,在处理真实地震数据时遇到的问题还要多,这需要大家耐心的分析问题原因,不断的调优模型。最后给大家留一个思考问题,在训练数据的使用过程中,我们的方案是训练数据和标签数据都用的含噪声的训练集。那还有没有其他的训练方式呢?比如训练数据和标签数据都用不含噪声训练集,或者训练数据含噪声,标签数据不含噪声,效果会有什么不同呢?大家可以自己做实验思考。以上就是今天的全部内容,如果你想获取代码,或有问题讨论,都欢迎联系我交流。下节课再见。如果喜欢请点赞,或
转载请注明:
http://www.aideyishus.com/lkzp/5904.html