【问题标题】:Keras gradient wrt input for multiple output dimensions用于多个输出维度的 Keras 梯度 wrt 输入
【发布时间】:2019-01-15 22:52:59
【问题描述】:

我有一个带有二维输出(二进制分类)的 keras 模型。

model.output # <tf.Tensor 'dense_1_3/MatMul:0' shape=(?, 2) dtype=float32>

model.input # <tf.Tensor 'bidirectional_1_input:0' shape=(?, ?, 200) dtype=float32>

我为形状 (1,50,200) 的一些示例输入评估了三种不同的渐变

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计算?

【问题讨论】:

    标签: python tensorflow keras neural-network


    【解决方案1】:

    Keras.backend.gradients() 期望输出是一个标量函数,而不是多维函数。我通过一个小例子发现 K.gradients() 的性能与 tf.gradients() 相同。这样(如此处所示:https://www.tensorflow.org/api_docs/python/tf/gradients),您的 gradients2 将返回 长度为 len(xs) 的张量列表,其中每个张量是 y in ys,这就解释了为什么第一个形状维度是 1 而不是 2。

    此链接可以帮助您:Tensorflow gradient with respect to matrix

    【讨论】:

      猜你喜欢
      • 2018-09-30
      • 2020-03-27
      • 2020-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-19
      • 1970-01-01
      相关资源
      最近更新 更多