Tensorflow:计算tf.multiply的梯度

时间:2017-02-21 10:05:08

标签: tensorflow

我正在构建一个具有以下两层的神经网络

pseudo_inputs = tf.Variable(a_numpy_ndarray)
weights = tf.Variable(tf.truncated_normal(...))

然后,我希望使用tf.multiply(与tf.matmul不同,相应的索引,即c_ij = a_ij * b_ij),将它们相乘

input = tf.multiply(pseudo_inputs, weights)

我的目标是学习weights。所以我跑

train_step = tf.train.AdamOptimizer(learn_rate).minimize(loss, var_list=[weights])

但它不起作用。网络根本没有变化。

看着张量板,我可以看到'输入'没有渐变,所以我假设这是问题所在。任何想法如何解决这个问题?

从阅读tensorflow文档来看,似乎我可能需要为tf.multiply编写渐变操作,但我发现很难相信没有人需要这样做。

1 个答案:

答案 0 :(得分:0)

我认为pseudo_inputs应该在第一行设置为占位符。

在这一行:

train_step = tf.train.AdamOptimizer(learn_rate).minimize(loss, var_list=[weights])

由于权重要通过最小化损失在图表中进行训练,因此它不应作为参数在此处传递。

train = tf.train.AdamOptimizer(learn_rate).minimize(loss)

然后你应该首先使用你拥有的样本(你没有标签)来运行火车。

for x_train, y_train in samples:
    sess.run(train, {pseudo_inputs:x_train, y:y_train})

之后你可以通过以下方式获得权重:

W_c, loss_c  = sess.run([W, loss], {pseudo_inputs=x_train, y:y_train})