Keras - 获得训练层的重量
Keras - get weight of trained layer
我正在尝试获取经过训练的网络中某个层的值。我可以将该层作为 TensorFlow Tensor,但我无法以数组形式访问它的值:
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 ??
.get_weights()
将 return 特定层或模型的权重作为 numpy 数组
layer_dict[layer_name].get_weights()
如果您想要层的输出,请查看问题 的答案。
如果您使用 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]
我正在尝试获取经过训练的网络中某个层的值。我可以将该层作为 TensorFlow Tensor,但我无法以数组形式访问它的值:
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 ??
.get_weights()
将 return 特定层或模型的权重作为 numpy 数组
layer_dict[layer_name].get_weights()
如果您想要层的输出,请查看问题
如果您使用 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]