Keras - 获取已训练层的权重

5

我试图获取训练网络中一层的值。我可以把这层作为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 ??

3
你需要输出数值还是权重?它们并不相同。 - Dr. Snoopy
2个回答

4

.get_weights() 方法将以numpy数组的形式返回特定层或模型的权重

layer_dict[layer_name].get_weights()

如果您需要该层的输出,请查看此问题中的答案:这里

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]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接