输入应该是numpy数组.
因此,代替tf.Variable(tf.random_normal([K])),只需编写np.random.randn(K),一切都应该按预期工作.
编辑(问题在我回答后澄清):
可以使用占位符作为参数,但方式略有不同.例如:
lchild = tf.placeholder(tf.float32, shape=(K))
rchild = tf.placeholder(tf.float32, shape=(K))
parent = tf.nn.tanh(tf.add(lchild, rchild))
loss =
# Compute gradients with respect to the input variables
grads = tf.gradients(loss, [lchild, rchild])
inputs = [np.random.randn(K), np.random.randn(K)]
for i in range():
np_grads = sess.run(grads, feed_dict={lchild:inputs[0], rchild:inputs[1])
inputs[0] -= 0.1 * np_grads[0]
inputs[1] -= 0.1 * np_grads[1]
然而,这不是最好或最简单的方法.它的主要问题是,在每次迭代时,您都需要将numpy数组复制到会话中或从会话中复制(可能在GPU等其他设备上运行).
占位符通常用于提供模型外部的数据(如文本或图像).使用tensorflow实用程序解决它的方法如下:
lchild = tf.Variable(tf.random_normal([K])
rchild = tf.Variable(tf.random_normal([K])
parent = tf.nn.tanh(tf.add(lchild, rchild))
loss =
train_op = tf.train.GradientDescentOptimizer(loss).minimize(0.1)
for i in range():
sess.run(train_op)
# Retrieve the weights back to numpy:
np_lchild = sess.run(lchild)