在 Keras 模型中获取中间层输出的正确方法?
Correct way to get output of intermediate layer in Keras model?
我在 Keras 中训练了一个模型,想从中间层提取输出。该模型包含丢失层,我想绝对确保这样做时没有丢失任何东西。
根据documentation,一层的输出可以这样提取:
layer_name = 'my_layer'
intermediate_layer_model = Model(inputs=model.input,
outputs=model.get_layer(layer_name).output)
intermediate_output = intermediate_layer_model.predict(data)
但是,文档还展示了如何使用 Keras 函数执行此操作:
get_3rd_layer_output = K.function([model.layers[0].input, K.learning_phase()],
[model.layers[3].output])
# output in test mode = 0
layer_output = get_3rd_layer_output([x, 0])[0]
# output in train mode = 1
layer_output = get_3rd_layer_output([x, 1])[0]
这里,learning_phase()标志告诉keras是否实际使用dropout和类似的东西,这些东西只在训练期间使用。
我的问题是,如果我使用第一种方法,dropout 会自动停用,还是我需要做一些类似于设置学习阶段标志的事情(就像第二种方法中所做的那样)。
是的,Model
知道它在训练或测试时,当您调用 train()
或 predict()
时会自动设置标志。
我在 Keras 中训练了一个模型,想从中间层提取输出。该模型包含丢失层,我想绝对确保这样做时没有丢失任何东西。
根据documentation,一层的输出可以这样提取:
layer_name = 'my_layer'
intermediate_layer_model = Model(inputs=model.input,
outputs=model.get_layer(layer_name).output)
intermediate_output = intermediate_layer_model.predict(data)
但是,文档还展示了如何使用 Keras 函数执行此操作:
get_3rd_layer_output = K.function([model.layers[0].input, K.learning_phase()],
[model.layers[3].output])
# output in test mode = 0
layer_output = get_3rd_layer_output([x, 0])[0]
# output in train mode = 1
layer_output = get_3rd_layer_output([x, 1])[0]
这里,learning_phase()标志告诉keras是否实际使用dropout和类似的东西,这些东西只在训练期间使用。
我的问题是,如果我使用第一种方法,dropout 会自动停用,还是我需要做一些类似于设置学习阶段标志的事情(就像第二种方法中所做的那样)。
是的,Model
知道它在训练或测试时,当您调用 train()
或 predict()
时会自动设置标志。