我有一个具有二维输出(二进制分类)的keras模型。在
model.output # <tf.Tensor 'dense_1_3/MatMul:0' shape=(?, 2) dtype=float32>
以及
^{pr2}$我评估了三种不同的渐变,用于输入shape(150200)
gradients0 = K.gradients(model.output[:,0] model.inputs)
gradients1 = K.gradients(model.output[:,1], model.inputs)
gradients2 = K.gradients(model.output, model.inputs)
我想,前两个表达式给出单个输出神经元的梯度,最后一个表达式得到包含前两个表达式的张量。
令我惊讶的是,这三个渐变的形状都是(1,50,200)
。在我看来,gradients2必须是(2,50,200)
的形状,因为model.output
是二维的。在这种情况下,keras的计算是什么?在
在Keras.backend.gradients公司()期望输出是标量函数,而不是多维函数。我在一个小例子中发现K.gradients()的执行方式与tf.梯度(). 这样(如图:https://www.tensorflow.org/api_docs/python/tf/gradients),你的梯度2将返回长度为len(xs)的张量列表,其中每个张量都是y中y的和(dy/dx),这解释了为什么第一个形状维是1而不是2。在
此链接可以帮助您:Tensorflow gradient with respect to matrix
相关问题 更多 >
编程相关推荐