将可训练变量输入TensorFlow中的占位符

时间:2017-03-31 11:53:39

标签: python optimization tensorflow placeholder

假设我想在一些仅在运行时知道的样本(以及变量)上训练模型。

案例研究:PCA(X W = Y)

Valid XHTML

(这只是一个复杂模型的简化)

以这个简单的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

0 个答案:

没有答案