假设我想在一些仅在运行时知道的样本(以及变量)上训练模型。
(这只是一个复杂模型的简化)
以这个简单的PCA模型为例,其中只有特征尺寸(Din和Dout)已知并且已修复。
W = tf.Variable(tf.zeros([D_in, D_out]), name='weights', trainable=True)
X = tf.placeholder(tf.float32, [None, D_in], name='placeholder_latent')
Y_est = tf.matmul(X, W)
loss = tf.reduce_sum((Y_tf-Y_est)**2)
train_step = tf.train.AdamOptimizer(0.001).minimize(loss)
现在假设我们生成了一些数据
W_true = np.random.randn(D_in, D_out)
X_true = np.random.randn(N, D_in)
Y_true = np.dot(X_true, W_true)
Y_tf = tf.constant(Y_true.astype(np.float32))
一旦我知道了我的培训数据的维度,我就可以声明将要提供给占位符latent
的{{1}}变量进行优化。
X
之后,我想要做的是将此latent = tf.Variable(tf.zeros([N, D_in]), name='latent', trainable=True)
init_op = tf.global_variables_initializer()
变量提供给占位符latent
并运行优化。
X
问题在于优化器不会优化with tf.Session() as sess:
sess.run(init_op)
for n in range(10000):
sess.run(train_step, feed_dict={X : sess.run(latent)})
if (n+1) % 1000 == 0:
print('iter %i, %f' % (n+1, sess.run(loss, feed_dict={X : sess.run(latent)})))
和W
,而只会优化latent
。我也尝试过直接提供变量而不进行评估,但是我收到了这个错误:
W
你遇到过这种问题吗?你知道如何克服这个问题吗?是否有任何可能的解决方法来优化占位符?
顺便说一句,我正在使用ValueError: setting an array element with a sequence.
与TensorFlow 1.1.0rc0