我在网上寻找了几个样本来构建一个用于数据去噪的堆叠自动编码器,但我似乎不了解编码器部分的基本部分:
- https://blog.keras.io/building-autoencoders-in-keras.html
按照示例,我像这样构建了自动编码器:
inputs = Input(shape=(timesteps, 50))
encoded1 = Dense(30, activation="relu")(inputs)
encoded2 = Dense(15, activation="relu")(encoded1)
encoded3 = Dense(5, activation="relu")(encoded2)
decoded1 = Dense(15, activation="relu")(encoded3)
decoded2 = Dense(30, activation="relu")(decoded1)
decoded = Dense(50, activation="sigmoid")(decoded2)
autoencoder = Model(inputs=inputs, outputs=decoded)
encoder = Model(inputs, encoded3)
autoencoder.compile(loss='mse', optimizer='rmsprop')
autoencoder.fit(trainX,
trainX,
epochs=epochs,
batch_size=512,
callbacks=callbacks,
validation_data=(trainX, trainX))
在示例中,主要有一个带有编码器的模型和一个带有解码器的单独模型。我总是看到只有解码器模型得到训练。编码器未经训练。但对于我的用例,我只需要编码器模型来对数据进行降噪。为什么编码器不需要培训?
你对编码器解码器的解释是错误的。编码器将您的输入数据编码为一些抽象的高维表示形式,但如果您想将其用作进一步预测的特征,它非常强大。为了确保编码输出与您的实际输入尽可能接近,您可以使用解码器将编码的高维输入解码回原始输入。在训练过程中,编码器和解码器都涉及,即编码器层和解码器层的权重都会更新。如果编码器没有经过训练,它将如何学习编码机制。在推理过程中,您只需使用编码器模块对输入进行编码。