该示例创建了一个编码器模型、一个解码器模型,并在两个调用中将它们链接,以获得自动编码器模型:
编码器模型:
将输入源数据进行压缩编码,一定程度上可以去除输入数据的噪音,最大程度上保留图像的原始特征
解码器模型:
将编码器编码压缩后的数据按照一定策略进行解压,也就是解码,将压缩后的数据还原成原始的数据,但是经过这样一个操作后,输出和原始数据肯定是会有损失的,所以像图像填充、音频去噪就是按照这个原理实现的,保留原始数据最重要的特征,取出掉数据中的噪音。
完整代码:
""" * Created with PyCharm * 作者: 阿光 * 日期: 2022/1/2 * 时间: 12:16 * 描述: """ from keras import Model from tensorflow import keras from tensorflow.keras.layers import * encoder_input = Input(shape=(28, 28, 1), name='img') x = Conv2D(16, 3, activation='relu')(encoder_input) x = Conv2D(32, 3, activation='relu')(x) x = MaxPooling2D(3)(x) x = Conv2D(32, 3, activation='relu')(x) x = Conv2D(16, 3, activation='relu')(x) encoder_output = GlobalMaxPooling2D()(x) encoder = Model(encoder_input, encoder_output, name='encoder') encoder.summary() decoder_input = Input(shape=(16,)) x = Reshape((4, 4, 1))(encoder_output) x = Conv2DTranspose(16, 3, activation='relu')(x) x = Conv2DTranspose(32, 3, activation='relu')(x) x = UpSampling2D(3)(x) x = Conv2DTranspose(16, 3, activation='relu')(x) decoder_output = Conv2DTranspose(1, 3, activation='relu')(x) decoder = Model(encoder_input, decoder_output, name='decoder') decoder.summary() auto_encoder = Model(encoder_input, decoder_output, name='autoencoder') auto_encoder.summary() keras.utils.plot_model(auto_encoder, "auto_encoder.png", show_shapes=True)