Keras在训练时获取最后一层的输出
Keras get the output of the last layer during training
目标是在训练阶段恢复变分自动编码器最后一层的输出,作为另一个算法的训练数据。
附模型变分自动编码器代码:
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 数据上使用模型的预测方法来做到这一点,但我认为这不是最好的方法。
您可以使用先前训练模型的预测来训练新模型,只需将其堆叠在所需的输出新层上并在旧层上设置 trainable = 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()
我使用最后一个自动编码器层的输出作为新块的输入。我们可以合并所有编译一个新模型,其中输入与自动编码器相同,这样我们就可以将训练数据用于另一个算法而无需调用预测方法
要解决这个问题,唯一可以使用的方案就是DL模型的.predict方法。谢谢@marrco
目标是在训练阶段恢复变分自动编码器最后一层的输出,作为另一个算法的训练数据。 附模型变分自动编码器代码:
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 数据上使用模型的预测方法来做到这一点,但我认为这不是最好的方法。
您可以使用先前训练模型的预测来训练新模型,只需将其堆叠在所需的输出新层上并在旧层上设置 trainable = 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()
我使用最后一个自动编码器层的输出作为新块的输入。我们可以合并所有编译一个新模型,其中输入与自动编码器相同,这样我们就可以将训练数据用于另一个算法而无需调用预测方法
要解决这个问题,唯一可以使用的方案就是DL模型的.predict方法。谢谢@marrco