在将batch_xs提供给x时,我重新设置了batch_xs,因为BATCH_SIZE为1。 这是我的来源。 我不确定是什么造成了ValueError。
with tf.name_scope("input") as scope:
x = tf.placeholder(tf.float32, shape=[1, 784])
BATCH_SIZE = 1
DROP_OUT_RATE = 0.4
EPOCH = 1
MEMORIZE = 10
accuracy_array = []
loss = tf.nn.l2_loss(y - x) / BATCH_SIZE
train_step = tf.train.AdamOptimizer(1e-4).minimize(loss)
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
mnist_list = make_mnist_train_list(55000, 10)
test_list = make_mnist_test_list(5000, 10)
sess = tf.Session()
sess.run(tf.initialize_all_variables())
for i in range(EPOCH):
for j in range(5500/BATCH_SIZE):
batch_xs = tf.reshape(mnist_list[0][j*BATCH_SIZE:j*BATCH_SIZE+1], [1, 784])
sess.run(train_step, feed_dict={x: batch_xs, keep_prob: (1.0 - DROP_OUT_RATE), r_keep_prob: (1.0 - DROP_OUT_RATE)})
if (i +1)% MEMORIZE == 0:
accuracy_array.append(loss.eval(session=sess, feed_dict={x: batch_xs, keep_prob: 1.0, r_keep_prob: 1.0}))
print(accuracy_array[ int(math.floor((i+1)/MEMORIZE -1))])
这给了我Value值,这对我来说没有意义。
ValueError:参数必须是密集张量
答案 0 :(得分:2)
来自文档here:
feed_dict中的每个键都可以是以下类型之一:
如果键是Tensor,则该值可以是Python标量,字符串,列表或numpy ndarray,可以转换为与该张量相同的dtype。此外,如果键是占位符,则将检查值的形状是否与占位符兼容。
如果密钥是SparseTensor,则该值应为SparseTensorValue。
您可以用作"值"的类型。对于feed_dict
中的键,应该是Python原始类型或numpy数组。您正在使用tf.reshape
的结果,这是TensorFlow Tensor类型。如果要提供重新整形的数组,可以使用np.reshape
。