深度学习中的自动编码器:TensorFlow示例

本文介绍了自动编码器的基本概念及其工作原理,重点讲述了如何使用TensorFlow构建堆叠自动编码器来处理图像数据。通过实例展示了数据预处理、网络架构定义、优化过程以及模型训练与评估。自动编码器在图像去噪和生成方面有广泛应用。
摘要由CSDN通过智能技术生成
什么是自动编码器?

  自动编码器是重建输入的绝佳工具。简单来说,机器就是一个图像,可以生成一个密切相关的图片。这种神经网络中的输入是未标记的,这意味着网络能够在没有监督的情况下进行学习。更准确地说,输入由网络编码,仅关注最关键的特征。这是自动编码器因降维而流行的原因之一。此外,自动编码器可用于生成生成学习模型。例如,神经网络可以用一组面部训练,然后可以产生新的面部。

Autoencoder如何工作?

  自动编码器的目的是通过仅关注基本特征来产生输入的近似值。您可能会想到为什么不仅仅学习如何复制和粘贴输入以产生输出。实际上,自动编码器是一组约束,迫使网络学习表示数据的新方法,而不仅仅是复制输出。

  典型的自动编码器定义有输入,内部表示和输出(输入的近似值)。学习发生在附加到内部表示的层中。实际上,有两个主要的层块看起来像传统的神经网络。稍有不同的是包含输出的图层必须等于输入。在下图中,原始输入进入称为编码器的第一个块。此内部表示压缩(缩小)输入的大小。在第二个块中发生输入的重建。这是解码阶段。

  该模型将通过最小化损失函数来更新权重。如果重建输出与输入不同,则模型受到惩罚。

  具体地说,想象一个大小为50x50(即250像素)的图片和一个只有一个由100个神经元组成的隐藏层的神经网络。学习是在比输入小两倍的特征图上完成的。这意味着网络需要找到一种重建250像素的方法,只有一个神经元矢量等于100。

堆叠自动编码器示例

  您将学习如何使用堆叠自动编码器。该架构类似于传统的神经网络。输入进入隐藏层以便压缩或减小其大小,然后到达重建层。目标是生成与原始图像一样接近的输出图像。模型必须学习在一组约束下实现其任务的方法,即具有较低维度的约束。

  如今,自动编码器主要用于对图像进行去噪。想象一下有划痕的图像; 人类仍然能够识别内容。去噪自动编码器的想法是为图像添加噪声,迫使网络学习数据背后的模式。

  另一个有用的自动编码器系列是变分自动编码器。这种类型的网络可以生成新图像。想象一下,你用一个男人的形象训练一个网络; 这样的网络可以产生新的面孔。

使用TensorFlow构建自动编码器

在本教程中,您将学习如何构建堆叠自动编码器以重建图像。

  您将使用包含60000个32x32彩色图像的CIFAR-10数据集。数据集已经分为50000个图像用于训练,10000个用于测试。最多有十个班级:

  • 飞机
  • 汽车
  • 鹿
  • 青蛙
  • 卡车

  您需要下载此URL中的图像https://www.cs.toronto.edu/~kriz/cifar.html并解压缩。-10-batches-py的文件夹包含五批数据,每个数据按随机顺序排列10000个。


  在构建和训练模型之前,需要应用一些数据处理。您将按以下步骤操作:

  1. 导入数据
  2. 将数据转换为黑白格式
  3. 附加所有批次
  4. 构建训练数据集
  5. 构建图像可视化工具
图像预处理
步骤1)导入数据

  根据官方网站,您可以使用以下代码上传数据。代码将使用数据和标签将数据加载到字典中。请注意,代码是一个函数。

import numpy as np
import tensorflow as tf
import pickle
def unpickle(file):
    import pickle
    with open(file, 'rb') as fo:
        dict = pickle.load(fo, encoding='latin1')
    return dict
步骤2)将数据转换为黑白格式

  为简单起见,您将数据转换为灰度。也就是说,对于颜色图像,仅有一个维度对三个维度。大多数神经网络仅适用于一维输入。

def grayscale(im):
    return im.reshape(im.shape[0], 3, 32, 32).mean(1).reshape(im.shape[0], -1)

步骤3)附加所有批次

  既然已经创建了两个函数并且加载了数据集,那么您可以编写一个循环来将数据附加到内存中。如果仔细检查,带有数据的解压缩文件名为data_batch_,编号从1到5.您可以循环访问文件并将其附加到数据。

# Load the data into memory
data, labels = [], []
## Loop over the b
for i in range(1, 6):
    filename = './cifar-10-ba
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值