gpt4 book ai didi

python - 使用 Keras 获取模型输出 w.r.t 权重的梯度

转载 作者:IT老高 更新时间:2023-10-28 22:12:13 25 4
gpt4 key购买 nike

我对使用 Keras API 的简单性构建强化学习模型很感兴趣。不幸的是,我无法提取相对于权重的输出梯度(不是错误)。我发现以下代码执行类似的功能(Saliency maps of neural networks (using Keras))

get_output = theano.function([model.layers[0].input],model.layers[-1].output,allow_input_downcast=True)
fx = theano.function([model.layers[0].input] ,T.jacobian(model.layers[-1].output.flatten(),model.layers[0].input), allow_input_downcast=True)
grad = fx([trainingData])

任何关于如何计算模型输出相对于每一层权重的梯度的想法都将不胜感激。

最佳答案

要使用 Keras 获得模型输出相对于权重的梯度,您必须使用 Keras 后端模块。我创建了这个简单的示例来准确说明该怎么做:

from keras.models import Sequential
from keras.layers import Dense, Activation
from keras import backend as k


model = Sequential()
model.add(Dense(12, input_dim=8, init='uniform', activation='relu'))
model.add(Dense(8, init='uniform', activation='relu'))
model.add(Dense(1, init='uniform', activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

要计算梯度,我们首先需要找到输出张量。对于模型的输出(我最初提出的问题),我们只需调用 model.output。我们还可以通过调用 model.layers[index].output

找到其他层的输出梯度
outputTensor = model.output #Or model.layers[index].output

然后我们需要选择与梯度相关的变量。

  listOfVariableTensors = model.trainable_weights
#or variableTensors = model.trainable_weights[0]

我们现在可以计算梯度。就这么简单:

gradients = k.gradients(outputTensor, listOfVariableTensors)

要实际运行给定输入的梯度,我们需要使用一点 Tensorflow。

trainingExample = np.random.random((1,8))
sess = tf.InteractiveSession()
sess.run(tf.initialize_all_variables())
evaluated_gradients = sess.run(gradients,feed_dict={model.input:trainingExample})

就是这样!

关于python - 使用 Keras 获取模型输出 w.r.t 权重的梯度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39561560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com