【问题标题】:Keras - get weight of trained layerKeras - 获得训练层的权重
【发布时间】:2017-10-07 09:12:29
【问题描述】:

我正在尝试在经过训练的网络中获取层的值。我可以将图层作为 TensorFlow 张量获取,但我无法以数组形状访问其值:

from keras.models import load_model

model = load_model('./model.h5')
layer_dict = dict([(layer.name, layer) for layer in model.layers])

layer_name = 'block5_sepconv1_act'
filter_index = 0

layer_output = layer_dict['model_1'][layer_name].output
# <tf.Tensor 'block5_sepconv1_act/Relu:0' shape=(?, 16, 16, 728) dtype=float32>
layer_filter = layer_output[:, :, :, filter_index]
# <tf.Tensor 'strided_slice_11:0' shape=(?, 16, 16) dtype=float32>
# how do I get the 16x16 values ??

【问题讨论】:

  • 你想要输出值还是权重?它们不一样。

标签: python tensorflow neural-network keras keras-layer


【解决方案1】:

.get_weights() 会将特定层或模型的权重作为 numpy 数组返回

layer_dict[layer_name].get_weights()

如果您想要图层的输出,请查看问题here 的答案。

【讨论】:

    【解决方案2】:

    如果您使用 tensorflow 后端,您可以使用当前会话 sess 评估张量的值并提供正确的输入

    import keras.backend as K
    
    input_value = np.zeros(size=(batch_size, input_dim))
    sess = K.get_session()
    output = sess.run(layer_output, feed_dict={model.input: input_value})
    

    如果您只想检索权重,可以使用以下方法评估层的权重:

    weights = [w.eval(K.get_session) for w in layer_dict['model_1'][layer_name].weights]
    

    【讨论】:

      猜你喜欢
      • 2018-09-24
      • 2020-01-12
      • 2021-12-09
      • 1970-01-01
      • 1970-01-01
      • 2020-02-20
      • 1970-01-01
      • 2018-11-14
      • 1970-01-01
      相关资源
      最近更新 更多