利用 TensorFlow 实现卷积自编码器

介绍和概念

自动编码器(Auto-encoders)是神经网络的一种形式,它的输入数据与输出数据是相同的。他们通过将输入数据压缩到一个潜在表示空间里面,然后再根据这个表示空间将数据进行重构得到最后的输出数据。

自编码器的一个非常受欢迎的使用场景是图像处理。其中使用到的小技巧是用卷积层来替换全连接层。这个转变方法是将一个非常宽的,非常瘦的(比如 100*100 的像素点,3 通道,RGB)图像转换成一个非常窄的,非常厚的图像。这种方法非常有助于帮助我们从图像中提取出视觉特征,从而得到更准确的潜在表示空间。最后我们的图像重构过程采用上采样和卷积。

这个自编码器就称之为卷积自编码器(Convolutional Autoencoder,CAE)

使用卷积自编码器

卷积自编码器可以用于图像的重构工作。例如,他们可以学习从图片中去除噪声,或者重构图片缺失的部分。

为了实现上述提到的效果,我们一般不使用相同的输入数据和输出数据,取而代之的是,使用含有噪声的图片作为输入数据,然后输出数据是一个干净的图片。卷积自编码器就会通过学习,去去除图片中的噪声,或者去填补图片中的空缺部分。

接下来,让我们来看一下 CAE 是如何来填充图中眼睛上的十字架。我们假设图片的眼睛上面存在一个十字架黑影,我们需要删除这个十字架噪声。首先,我们需要来手动创建这个数据库,当然,这个动作非常方便。

现在我们的卷积自编码器就可以开始训练了,我们可以用它去除我们从未见过的眼睛照片上面的十字线!

利用 TensorFlow 来实现这个卷积自编码器

看我们利用 MNIST 数据集来看看这个网络是如何实现的,完整的代码可以在 Github 上面下载。

网络架构

卷积自编码器的编码部分将是一个典型的卷积过程。每一个卷积层之后都会加上一个池化层,主要是为了减少数据的维度。解码器需要从一个非常窄的数据空间中重构出一个宽的图像。

自动编码器只需要在噪声的图像上进行训练,就可以非常成功的进行图片去燥。比如,我们可以在训练图片中添加入高斯噪声来创建包含噪声的图像,然后将这些像素值裁剪在 0 到 1 之间。我们将噪声图像作为输入数据,最原始的感觉图像作为输出数据,也就是我们的目标值。

模型定义

训练过程:

作者:chen_h

CoderPai 是一个专注于人工智能在量化交易应用的算法实战平台,主要关注人工智能在文本和金融上面的应用。如果你对人工智能感兴趣,请快快关注 “CoderPai” 微信号(coderpai)吧。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180105G065ZV00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券