自编码器、去噪自编码器、卷积去噪自编码器
1.基于tensorflow的自编码器代码
#自编码器
import tensorflow as tf
from tensorflow.keras.datasets import mnist
import matplotlib.pyplot as plt
#加载数据,x_train为(60000张,28,28)的图,y_train是对应的标签,x_test为(10000张,28,28)的图,y_test是对应的标签
(x_train, y_train), (x_test, y_test) = mnist.load_data()
#x_train转化为(60000,784),x_test为(10000,784)
x_train=x_train.reshape(x_train.shape[0], -1)
x_test=x_test.reshape(x_test.shape[0], -1)
#归一化,tf.cast():tensorflow中张量数据类型转换,如下是将图片转化为float32类型
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_dim=tf.keras.layers.Input(shape=(input_size,))
#encode
#Dense全连接层,把input_dim传入这个全连接层
en=tf.keras.layers.Dense(hidden_size, activation='relu')(input_dim)
#decode
de=tf.keras.layers.Dense(output_size,activation='sigmoid')(en)
#模型
model=tf.keras.Model(inputs=input_dim,outputs=de)
#显示模型信息
model.summary()
#画模型图
tf.keras.utils.plot_model(model,show_shapes=True)
#告知训练时用的优化器optimizer、损失函数loss、准确率评测标准metrics
model.compile(optimizer='adam',loss='mse')
#训练:epochs训练轮次,batch_size批次大小即多少张一起训练,shuffle=True指打乱进行训练,validation_data验证集
model.fit(x_train,x_train,epochs=50,batch_size=256,shuffle=True,validation_data=(x_test,x_test))
#model的层
model.layers
#获得encoder模型(把一张图像压缩成一个向量)
encode=tf.keras.Model(inputs=input_dim,outputs=en)
#获得decoder模型(把一个向量还原回图像)
input_decoder=tf.keras.layers.Input(shape=(hidden_size,))
output_decoder=model.layers[-1](input_decoder)#model.layers[-1]调用model模型的最后一层
decode=tf.keras.Model(inputs=input_decoder, outputs=output_decoder)
#调用encoder模型把测试集数据压缩为32维向量
#encode_test=encode(x_test)会得到一个tensor,而用predict可以返回一个numpy数据(10000,32)
encode_test=