自动编码器重建图像及Python实现

自动编码器简介

自动编码器(一下简称AE)属于生成模型的一种,目前主流的生成模型有AE及其变种和生成对抗网络(GANs)及其变种。随着深度学习的出现,AE可以通过网络层堆叠形成深度自动编码器来实现数据降维。通过编码过程减少隐藏层中的单元数量,可以以分层的方式实现降维,在更深的隐藏层中获得更高级的特征,从而在解码过程中更好的重建数据。

自动编码器原理

自动编码器是通过无监督学习训练的神经网络,实际上是一个将数据的高维特征进行压缩降维编码,再经过相反的解码过程还原原始数据的一种学习方法。学习过程中通过解码得到的最终结果与原数据进行比较,通过修正权重偏置参数降低损失函数,不断提高对原数据的复原能力。自动编码器学习的前半段的编码过程得到的结果即可代表原数据的低维“特征值”。通过学习得到的自编码器模型可以实现将高维数据压缩至所期望的维度,原理与PCA相似。自编码器的学习过程如图1所示:
图1图1
自动编码器架构主要由两部分组成:
编码过程:
自动编码器将输入数据 x 进行编码,得到新的特征 x’ ,这称为编码过程,可表述为:在这里插入图片描述
其编码过程就是在 (Wx+b) 的线性组合外加上非线性的激活函数 f(x)
解码过程:
利用特征 x’ 重构出与原始输入数据最接近的重构数据 x^ ,这称为解码过程,可表述为:
在这里插入图片描述
原始输入 x 和重构原始输入 x^ 之间构成重构误差,自动编码器学习最小化该重建误差,即:
在这里插入图片描述
一般会给自编码器增加 WT = W 的限制

AE算法伪代码

AE算法伪代码如下图2所示:
图2

深度自编码(DAE)

  • 2
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
自编码器是一种无监督学习算法,可以用于数据压缩、特征提取等任务。下面是一个使用Python实现自编码器的示例代码: ``` import numpy as np import tensorflow as tf from tensorflow.keras import layers # 定义自编码器模型 class Autoencoder(tf.keras.Model): def __init__(self, encoding_dim): super(Autoencoder, self).__init__() self.encoding_dim = encoding_dim self.encoder = tf.keras.Sequential([ layers.Dense(128, activation='relu'), layers.Dense(encoding_dim, activation='relu') ]) self.decoder = tf.keras.Sequential([ layers.Dense(128, activation='relu'), layers.Dense(784, activation='sigmoid') ]) def call(self, x): encoded = self.encoder(x) decoded = self.decoder(encoded) return decoded # 加载MNIST数据集 (x_train, _), (x_test, _) = tf.keras.datasets.mnist.load_data() # 数据预处理 x_train = x_train.astype('float32') / 255. x_test = x_test.astype('float32') / 255. # 将数据展平成一维向量 x_train = x_train.reshape((len(x_train), np.prod(x_train.shape[1:]))) x_test = x_test.reshape((len(x_test), np.prod(x_test.shape[1:]))) # 创建自编码器模型 autoencoder = Autoencoder(encoding_dim=32) # 编译模型 autoencoder.compile(optimizer='adam', loss='binary_crossentropy') # 训练模型 autoencoder.fit(x_train, x_train, epochs=50, batch_size=256, shuffle=True, validation_data=(x_test, x_test)) # 使用自编码器进行数据压缩和重建 encoded_imgs = autoencoder.encoder(x_test).numpy() decoded_imgs = autoencoder.decoder(encoded_imgs).numpy() # 可视化重建后的图像 import matplotlib.pyplot as plt n = 10 # 显示前10张图像 plt.figure(figsize=(20, 4)) for i in range(n): # 显示原始图像 ax = plt.subplot(2, n, i + 1) plt.imshow(x_test[i].reshape(28, 28)) plt.gray() ax.get_xaxis().set_visible(False) ax.get_yaxis().set_visible(False) # 显示重建后的图像 ax = plt.subplot(2, n, i + 1 + n) plt.imshow(decoded_imgs[i].reshape(28, 28)) plt.gray() ax.get_xaxis().set_visible(False) ax.get_yaxis().set_visible(False) plt.show() ``` 该代码使用Keras API构建自编码器模型,其编码器和解码器均为两层全连接层。训练模型使用MNIST数据集,并将每张图像展平成一维向量。最后将自编码器用于压缩和重建图像,并将原始图像重建后的图像可视化展示出来。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值