我正在构建一个具有以下两层的神经网络
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编写渐变操作,但我发现很难相信没有人需要这样做。
答案 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})