介绍:
自编码器(AutoEncoder)是深度学习中的一类无监督学习模型,有encoder和decoder两个部分组成
- encoder 将原始表示编码成隐层表示
- decoder 将隐层表示解码成原始表示
- 训练目标为最小化重构误差
- 隐层特征维度一般低于原始特征维度,降维的同时学习更稠密更有意义的表示
自编码器主要是一种思想,encoder和decoder可以由全连接层、CNN或RNN等模型实现。以下使用Keras,用CNN实现自编码器,通过学习从加噪图片到原始图片的映射,完成图像去噪任务。
代码:
使用keras+mnist搭建自编码器,使用卷积层参与搭建。
import numpy as np
from keras.datasets import mnist
from keras.layers import MaxPooling2D, UpSampling2D, Conv2D, Input, Dense
from keras.models import Model, load_model
import matplotlib.pyplot as plt
(x_train, y_train),(x_test, y_test) = mnist.load_data()
# 归一化
x_train = x_train.astype('float32')/255.0
x_test = x_test.astype('float32')/255.
# reshape
x_train = np.reshape(x_train, (len(x_train), 28, 28, 1)) # (n,h,w,c)
x_test = np.reshape(x_test, (x_test.shape[0], 28, 28, 1))
print(x_train.shape, x_test.shape)
# 加入随机白噪
noise_factor = 0.5
x_train_noisy = x_train + noise_factor * np.random.normal(loc=0.0, scale=1.0, size=x_train.shape)
x_test_noisy = x_test + noise_factor * np.random