【发布时间】:2017-07-21 23:01:51
【问题描述】:
我想知道是否可以计算模型输出相对于模型参数的梯度。换句话说,我想计算dy / d theta。
这是我的意思的一个简短示例:
import keras
import tensorflow as tf
# Dummy input
test = np.random.rand(1, 32, 32, 1)
x = tf.placeholder(tf.float32, shape=(None, 32, 32, 1))
model = keras.layers.Conv2D(16, 5, padding = 'same', activation='elu') (x)
model = keras.layers.Flatten() (model)
model = keras.layers.Dense(128, activation='relu') (model)
predictions = keras.layers.Dense(1) (model)
with tf.Session() as sess:
init_op = tf.global_variables_initializer()
sess.run(init_op)
y = sess.run(predictions, feed_dict={x: test})
# Get gradients of y w.r.t model parameters.
gradients = sess.run(tf.gradients(y, model_parameters))
我查看了tf.gradients() 的文档并指出
ys和xs每个都是Tensor或张量列表。grad_ys是Tensor的列表,保存ys接收到的梯度。该列表的长度必须与ys相同。
所以我明白两个 args 都需要是张量。但是,当我尝试
model_parameters = tf.trainable_variables()
model_parameters 是tensorflow.python.ops.variables.Variable 类型元素的列表
有没有办法将模型的参数作为张量用于微分?
【问题讨论】:
-
在这种情况下,“模型的参数”是什么意思?
-
我的意思是模型的权重。在数学上是
d y/ d theta -
这些是变量。或者你认为变量是什么?
标签: python python-2.7 tensorflow keras gradient