目标是在训练阶段恢复可变自动编码器最后一层的输出,以用作另一种算法的训练数据。 随附模型变体自动编码器代码:
encoding_dim=58
input_dim=xtrain.shape[1]
inputArray=Input(shape=(input_dim,))
encoded= Dense(units=encoding_dim,activation="tanh")(inputArray)
encoded= Dense(units=29,activation="tanh")(encoded)
encoded= Dense(units=15,activation="tanh")(encoded)
encoded= Dense(units=10,activation="tanh")(encoded)
encoded= Dense(units=3,activation="tanh")(encoded)
encoded= Dense(units=10,activation="tanh")(encoded)
decoded= Dense(units=15,activation="tanh")(encoded)
decoded= Dense(units=29,activation="tanh")(decoded)
decoded= Dense(units=encoding_dim,activation="tanh")(decoded)
decoded= Dense(units=input_dim,activation="sigmoid")(decoded)
autoecoder=Model(inputArray,decoded)
autoecoder.summary()
autoecoder.compile(optimizer=RMSprop(),loss="mean_squared_error",metrics=["mae"])
#hyperparametrs :
batchsize=100
epoch=10
history = autoecoder.fit(xtrain_noise,xtrain,
batch_size=batchsize,
epochs=epoch,
verbose=1,
shuffle=True,
validation_data=(xtest_noise,xtest),
callbacks=[TensorBoard(log_dir="../logs/DenoiseautoencoderHoussem")])
我发现我可以按以下方式检索所需的图层:
autoecoder.layers[10].output
但是如何在训练过程中将他的输出存储在列表中?谢谢。
编辑: 我可以通过在xtrain数据上使用模型的预测方法来做到这一点,但是我认为这不是最好的方法。
答案 0 :(得分:1)
您可以使用先前已训练模型的预测来训练新模型,只需将其堆叠在所需的输出新层上,并在旧层上设置可训练= False。这是一个虚拟的例子
# after autoencoder fitting
for i,l in enumerate(autoecoder.layers):
autoecoder.layers[i].trainable = False
print(l.name, l.trainable)
output_autoecoder = autoecoder.layers[10].output
x_new = Dense(32, activation='relu')(output_autoecoder) # add a new layer for exemple
new_model = Model(autoecoder.input, x_new)
new_model.compile('adam', 'mse')
new_model.summary()
我将最后一个自动编码器层的输出用作新块的输入。我们可以合并所有编译的新模型,其中输入与自动编码器相同,这样我们就可以将训练数据用于另一种算法,而无需调用预测方法
答案 1 :(得分:0)
要解决此问题,唯一可以使用的解决方案是DL模型的.predict方法。谢谢@marrco