【问题标题】:Correct way to get output of intermediate layer in Keras model?在 Keras 模型中获取中间层输出的正确方法?
【发布时间】:2018-12-08 00:30:48
【问题描述】:

我在 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,或者我是否需要执行类似于设置学习阶段标志的操作(就像在第二种方法中所做的那样)。

【问题讨论】:

    标签: python tensorflow neural-network keras theano


    【解决方案1】:

    是的,Model 知道它何时是训练或测试,当您调用 train()predict() 时,该标志会自动设置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-21
      • 2018-05-16
      • 2019-01-27
      相关资源
      最近更新 更多