如何在不同的例子中加权渐变

时间:2017-02-26 04:25:58

标签: tensorflow

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)

1 个答案:

答案 0 :(得分:-1)

创建coef变量时,可以将trainable=False参数传递给它。有了这个,您的优化器将不会在训练期间修改它。引用official documentation

  

trainable:如果True(默认值)也将变量添加到图表中   集合GraphKeys.TRAINABLE_VARIABLES。此集合用作   Optimizer类使用的默认变量列表。