【问题标题】:What does this 'single' value represent in gradient?这个“单一”值在渐变中代表什么?
【发布时间】:2019-08-18 00:15:32
【问题描述】:

我试图计算输出层 w.r.t 的梯度。输入,我期待一个梯度矩阵(作为输出层中不同节点的梯度 w.r.t. 每个输入),但我得到一个值。我想知道这个值在这里代表什么?

我的目标是计算每个输入的分类交叉熵损失梯度。我一直在寻找解决方案,然后我坚持了下来。

我是新手,所以请忽略愚蠢的错误。

from keras.models import Sequential
from keras.layers import Dense, Activation
from keras import backend as k
import numpy as np
import tensorflow as tf

model = Sequential()
model.add(Dense(2, input_dim=1, init='uniform', activation='relu'))
model.add(Dense(2, init='uniform', activation='softmax'))

outputTensor = model.output
listOfVariableTensors = model.input

gradients = k.gradients(outputTensor, listOfVariableTensors)

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

print(evaluated_gradients)

我得到的打印语句输出为:

[array([[0.]], dtype=float32)]

【问题讨论】:

  • 你的版本tensorflowkeras 是什么?我的回报是[array([[0., 0.]], dtype=float32)]tensorflow=1.12.0keras=2.2.4
  • @giser_yugang 谢谢......我错误地粘贴了 input_dim=2 的代码......问题在任何情况下都是有效的

标签: python tensorflow input keras gradient


【解决方案1】:

k.gradients 是一个实际运行tf.gradients 的包装器。 如文档中所述

构造 ys w.r.t 的 sum 的符号导数。 x 在 xs 中。

tf.gradients 的结果是xs 的所有ys 导数的总和。公式如下:

结果的形状和xs一样,不是ys。一个例子:

import tensorflow as tf

a = tf.constant([[1.],[2.]])
b = tf.matmul(a,[[3.,4.]])
c = tf.matmul(a,[[5.,6.]])

grads1 = tf.gradients(ys=b,xs=a)
grads2 = tf.gradients(ys=[b,c],xs=a)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run(grads1))
    print(sess.run(grads2))

[array([[7.],[7.]], dtype=float32)]
[array([[18.],[18.]], dtype=float32)]

如果您想计算每个输入的分类交叉熵损失 w.r.t 的总梯度,只需执行 tf.gradients(ys=loss,xs=input)。如果要计算输出层 w.r.t. 中不同节点的梯度,则需要分别为每个 ys[i,j] 调用 tf.gradients。到每个输入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    • 2012-01-29
    • 1970-01-01
    • 2014-11-16
    • 1970-01-01
    • 2021-05-03
    相关资源
    最近更新 更多