1.自编码器(keras+mnist)

介绍

在这里插入图片描述

  • 自编码器(autoencoder, AE)是一类在半监督学习和非监督学习中使用的人工神经网络(准确地来说自编码器是一个自监督的算法,并不是一个无监督算法),其核心的作用是能够学习到输入数据的深层表示。自编码器包含编码器(encoder)和解码器(decoder)两部分。
  • 自编码器的相关模型:收缩自编码器(undercomplete autoencoder)、正则自编码器(regularized autoencoder)和变分自编码器(Variational AutoEncoder, VAE),其中前两者是判别模型、后者是生成模型。降噪自编码器(Denoising Autoencoders,DAE)、栈式自编码器(Stacked Autoencoders,SAE)、 稀疏编码器
  • 应用:
    • 数据去噪:对训练数据增加噪声并训练自编码器使其能恢复原有。这些限制条件防止自编码器机械地将输入复制到输出,并强制它学习数据的高效表示。可以参考论文栈式去燥自编码器
    • 非线性降维:自编码的降维操作是一个有损的操作,解压缩的输出与原来的输入相比是退化的。此外用于降维主要技术还有:PCA、t-SNE等。
    • 生成数据:自编码器还可以随机生成与训练数据类似的数据,这被称作生成模型(generative model)。比如,可以用人脸图片训练一个自编码器,它可以生成新的图片。

实验

  • 使用keras构建一个自编码器(仅使用全连接层),使用MNIST数据集测试。查看编码和解码过程,以及数据可视化。
  • 代码
import numpy as np
from keras.datasets import mnist
from keras.models import Model
from keras.layers import Dense, Input
import matplotlib.pyplot as plt

# 加载数据集 x_train(6000, 28, 28), y_train(60000, )
(x_train, y_train),(x_test, y_test) = mnist.load_data()
print(x_train.shape, y_train.shape, x_test.shape, y_test.shape)

# 转浮点 + 归一化
x_train = x_train.astype('float32')/255.0
x_test = x_test.astype('float32')/255.

# reshape数据形状,适用于Dense层的input
x_train = x_train.reshape(x_train.shape[0], 784)
x_test = x_test.reshape(-1, 784)

输出:
在这里插入图片描述

# 定义模型参数
encoding_dim = 2 # encode的最终维度, 2维目的是方便可视化

# 定义输入层
input_img = Input(shape=(784, ))

# 定义编码层
encoded = Dense(units=128, activation='relu')(input_img)
encoded = Dense(units=64, activation='relu')(encoded)
encoded = Dense(units=32, activation='relu')(encoded)
encoded_out = Dense(units=encoding_dim)(encoded)

# 定义解码层
decoded = Dense(units=32, activation='relu')(encoded_out)
decoded = Dense(units=64, activation='relu')(decoded)
decoded = Dense(units=128, activation='relu')(decoded)
decoded_out = Dense(units=784, activation='relu')(decoded)

# 构建自动编码器
autoencoder = Model(inputs = input_img, outputs=decoded_out) # 注意是inputs而不是input、
# 构建编码器
encoder = Model(inputs=input_img, outputs=encoded_out)

# 输出模型信息
print(autoencoder.summary())

输出:
在这里插入图片描述

# 编译模型
autoencoder.compile(optimizer='adam', loss='mse') # 优化器和损失函数

# 训练
autoencoder.fit(
    x = x_train,
    y = x_train, # 将原图与解码后的图作对比计算损失值
    epochs = 10,
    batch_size = 512,
    shuffle = True # 每个训练epoch后,数据会打乱
)

# 打印结果
encoded_imgs = encoder.predict(x_test)
print(encoded_imgs.shape
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值