Keras在训练期间获取最后一层的输出

时间:2020-05-04 16:47:58

标签: keras deep-learning autoencoder

目标是在训练阶段恢复可变自动编码器最后一层的输出,以用作另一种算法的训练数据。 随附模型变体自动编码器代码:

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数据上使用模型的预测方法来做到这一点,但是我认为这不是最好的方法。

2 个答案:

答案 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