自编码器
自编码器是一种神经网络,它的输入输出是一致的,目标是使用稀疏的高阶特征重新组合起来重构自己。自动编码器是一种数据的压缩算法,其中数据的压缩和解压缩函数是和数据相关的、有损的、从样本中自动学习的。在大部分提到自动编码器的场合,压缩和解压缩的函数是通过神经网络实现的。
设计自编码器
- 搭建自编码器
- 搭建解码器
- 设定损失函数
编码器的应用
- 数据去噪
- 降维
- 生成图像
变分自编码器(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))
- 最终结果