首页 > 解决方案 > LSTM 打印渐变 keras

问题描述

我正在尝试打印渐变,到目前为止我有这个。

my_model=load_model('word2vec_lstm.h5')

weights = my_model.weights # weight tensors

gradients = my_model.optimizer.get_gradients(my_model.total_loss, weights) # gradient tensors

input_tensors = [my_model.inputs[0], # input data
                 my_model.sample_weights[0], # sample weights
                 my_model.targets[0], # labels
                 K.learning_phase(), # train or test mode
]

get_gradients = K.function(inputs=input_tensors, outputs=gradients)

inputs = [[trainDataVecs], # X input data
          [1], # sample weights
          [Y_train], # y labels
          0.005 # learning phase in TEST mode
]

print [a for a in zip(weights, get_gradients(inputs))]

但是,这给了我以下错误InvalidArgumentError: transpose expects a vector of size 4. But input(1) is a vector of size 3

标签: pythontensorflowmachine-learningkerasdeep-learning

解决方案


还有另一种获取 RNN 模型梯度的方法(即 LSTM)。安装see-rnn这里调用的库。

这个库允许您在 Keras 和 TensorFlow 中获得 RNN 权重、梯度和激活可视化。

安装

pip install see-rnn

例子

all_grads = get_gradients(rnn_model, layer_index, x, y)
print(all_grads[0][0]) 

#output: array([ 0.00116622, -0.00739232, -0.00163304, -0.00379695,  0.0126757 ,
       -0.01117346], dtype=float32)

推荐阅读