import tensorflow as tf
import numpy as np
np.random.seed(0)
n_data = 5
x_data = np.matrix(np.random.randn(n_data, 3))
coef = np.matrix(np.arange(1, n_data + 1)).T
print x_data
# print np.sum(x_data, axis=0)
# print np.multiply(coef, x_data)
print np.sum(np.multiply(coef, x_data), axis=0)
x = tf.placeholder(tf.float32, shape=(None, 3))
w = tf.Variable([[1, 2], [1, 2], [1, 2]], dtype=tf.float32)
coef = tf.constant([1, 2, 3, 4, 5], shape=(n_data, 1), dtype=tf.float32)
res = tf.matmul(x, w)
res_new = tf.multiply(coef, res)
grads = tf.gradients(res_new, w)
with tf.Session() as sess:
tf.global_variables_initializer().run()
re = sess.run(grads, feed_dict={x: x_data})
print(re)
假设我有一个数据集x_data
,每行都是dim = 3的例子,那么我有一个3 * 2权重矩阵w
,我的输出是x_data * w。然后我想得到权重矩阵的梯度。所以我使用tf.gradients
。但它似乎直接总结了每个例子的渐变。我想要的是通过分布来总结每个例子的渐变。所以我使用tf.constant
coef
作为发布。它运作良好。但是我的问题是,如果coef也是张量流变量,我不知道该怎么办。当它还取决于w时,我不能简单地使用tf.multiply(coef, res)
。
答案 0 :(得分:-1)
创建coef
变量时,可以将trainable=False
参数传递给它。有了这个,您的优化器将不会在训练期间修改它。引用official documentation:
trainable
:如果True
(默认值)也将变量添加到图表中 集合GraphKeys.TRAINABLE_VARIABLES
。此集合用作Optimizer
类使用的默认变量列表。