当前位置: 首页 > 面试题库 >

使用Keras获取模型输出权重的梯度

司易安
2023-03-14
问题内容

我对通过Keras
API的简单性构建强化学习模型感兴趣。不幸的是,我无法提取相对于权重的输出梯度(不是误差)。

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})

就是这样!



 类似资料:
  • 我一直在尝试使用Keras构建一个多输入模型。我来自使用顺序模型,并且只有一个相当直接的输入。我一直在查看StackOverflow上的留档(https://keras.io/getting-started/functional-api-guide/)和一些答案(如何在Keras 2.0中“合并”顺序模型?)。基本上,我想要的是让两个输入训练一个模型。一个输入是一段文本,另一个是从该文本中提取的一

  • 本文向大家介绍keras 获取某层输出 获取复用层的多次输出实例,包括了keras 获取某层输出 获取复用层的多次输出实例的使用技巧和注意事项,需要的朋友参考一下 官方文档很全面,搜索功能也很好。但是如果你想单独实现某个功能,根本无从搜寻。于是我写了这个笔记。从功能出发。 两个tensor经过一个layer实例会产生两个输出。 这个代码有错误,因为最后一行没有指定lstm这个layer实例的那个输

  • 我似乎无法理解学习率的价值。我得到的是下面。 我已经尝试了200个epoch的模型,并希望查看/更改学习速率。这不是正确的方法吗?

  • 本文向大家介绍keras K.function获取某层的输出操作,包括了keras K.function获取某层的输出操作的使用技巧和注意事项,需要的朋友参考一下 如下所示: 加载训练好并保存的网络模型 加载数据(图像),并将数据处理成array形式 指定输出层 将处理后的数据输入,然后获取输出 其中,K.function有两种不同的写法: 1. 获取名为layer_name的层的输出 layer

  • 问题内容: 我正在使用 Keras 运行一个简单的前馈网络。仅具有一个隐藏层,我想对每个输入与每个输出的相关性做出一些推断,并且我想提取权重。 这是模型: 为了提取重量,我写道: 不幸的是,我没有矩阵中的biass列,我知道Keras会自动将其放入。 您知道如何获取偏倚权重吗? 预先感谢您的帮助 ! 问题答案: 对于图层,返回两个元素的列表,第一个元素包含权重,第二个元素包含偏差。因此,您可以简单

  • 我有一个简单的顺序神经网络,我想用它来训练分类器。它由一个输入层、三个隐藏层和一个输出层组成,如下所示: 如何提取与每个隐藏层关联的权重。最终目标是使用激活函数计算每个标签成为正确标签的概率。 希望你能理解。感谢您的任何帮助。