多输出维度的Keras梯度wrt输入

2024-09-26 18:02:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个具有二维输出(二进制分类)的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的计算是什么?在


Tags: 模型outputmodel表达式tf二进制分类keras
1条回答
网友
1楼 · 发布于 2024-09-26 18:02:32

在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

相关问题 更多 >

    热门问题