这个 'single' 值在渐变中代表什么?
What does this 'single' value represent in gradient?
我尝试计算输出层的梯度w.r.t。输入,我期待一个梯度矩阵(作为输出层中不同节点的梯度 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)]
k.gradients
是实际运行 tf.gradients
的包装器。
如文档所述
Constructs symbolic derivatives of sum of ys w.r.t. x in 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
。每个输入。
我尝试计算输出层的梯度w.r.t。输入,我期待一个梯度矩阵(作为输出层中不同节点的梯度 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)]
k.gradients
是实际运行 tf.gradients
的包装器。
如文档所述
Constructs symbolic derivatives of sum of ys w.r.t. x in 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
。每个输入。