tensorflow实现简单基本自编码器

自编码器

自编码器是一种神经网络,它的输入输出是一致的,目标是使用稀疏的高阶特征重新组合起来重构自己。自动编码器是一种数据的压缩算法,其中数据的压缩和解压缩函数是和数据相关的、有损的、从样本中自动学习的。在大部分提到自动编码器的场合,压缩和解压缩的函数是通过神经网络实现的。

设计自编码器

  • 搭建自编码器
  • 搭建解码器
  • 设定损失函数

在这里插入图片描述

编码器的应用

  • 数据去噪
  • 降维
  • 生成图像

变分自编码器(VAE)

可以随机生成隐含变量,提高网络的泛化能力,比普通的自动编码器更好,缺点就是生成的图片会有点模糊。

代码详解

  • 导入相关包
import tensorflow as tf
import matplotlib.pyplot as plt
  • 导入准备好的数据集
(x_train,_),(x_test,_)=tf.keras.datasets.mnist.load_data()
x_train=x_train.reshape(x_train.shape[0],-1)
x_test=x_test.reshape(x_test.shape[0],-1) #-1代表自动计算 28*28
  • 图片的归一化操作
x_train=tf.cast(x_train,tf.float32)/255
x_test=tf.cast(x_test,tf.float32)/255 #归一化
  • 设置好输入输出的图片大小
input_size=784
hidden_size=32
output_size=784
  • 建立好编码器和解码器
input=tf.keras.layers.Input(shape=(input_size,))
#encode
en = tf.keras.layers.Dense(hidden_size,activation='relu')(input)

#decode
de = tf.keras.layers.Dense(output_size,activation='sigmoid')(en)


model = tf.keras.Model(inputs=input,outputs=de)
  • 将建立好的model进行编译和运行
model.compile(optimizer='adam',loss='mse')
model.fit(
    x_train,x_train,epochs=5,batch_size=256,shuffle=True,validation_data=(x_test,x_test)
)
  • 将编码器"取出"
encode = tf.keras.Model(inputs=input,outputs=en)
  • 将解码器"取出"
input_de = tf.keras.layers.Input(shape=(hidden_size,))
output_de = model.layers[-1](input_de)

decode = tf.keras.Model(inputs=input_de,outputs=output_de)
  • 构造测试数据
encode_test = encode(x_test)
decode_test=decode(encode_test)
  • 测试
n=10
plt.figure(figsize=(20,4))
for i in range(1,n):
    ax = plt.subplot(2,n,i)
    plt.imshow(x_test[i].reshape(28,28))
    ax = plt.subplot(2,n,i+n)
    plt.imshow(decode_test[i].reshape(28,28))
  • 最终结果
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值