【发布时间】:2016-06-03 18:58:56
【问题描述】:
我在尝试评估我的模型时遇到以下错误。
tensorflow.python.framework.errors.InvalidArgumentError: Minimum tensor rank: 1 but got: 1 [[Node: ArgMax_1 = ArgMax[T=DT_INT64, _device="/job:localhost/replica:0/task:0/cpu:0"](_recv_Placeholder_1_0, ArgMax_1/dimension/_40)]]
这里是相关代码
# Predictions for the current training minibatch.
train_prediction = tf.nn.softmax(logits)
correct_prediction = tf.equal(tf.argmax(train_prediction, 1), tf.argmax(train_labels, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
sess.run(tf.initialize_all_variables())
for i in range(1000000):
start_time = time()
images, labels = get_batch(fifo_queue, FLAGS.batch_size)
feed_dict = {
train_images: images,
train_labels: labels
}
_, loss_value, learn_rate, predictions = sess.run(
[train_step, cross_entropy, learning_rate, train_prediction],
feed_dict=feed_dict)
duration = time() - start_time
if i % 1 == 0:
# Print status to stdout.
print('Step %d: loss = %.3f (%.3f sec)' % (i, loss_value, duration))
train_accuracy = accuracy.eval(feed_dict={
train_images: images, train_labels: labels, keep_prob: 1.0})
print("step %d, training accuracy %g"%(i, train_accuracy))
train_step.run(feed_dict={train_images: images[0], train_labels: labels[1], keep_prob: 0.5})
`
我还没有尝试太多,因为我刚刚获得了我的第一个模型评估,而这个错误(表示期望 1 并得到 1)并没有太大帮助。
【问题讨论】:
-
从我看来这似乎很好,只要函数
get_batch()返回具有正确形状的张量。尝试查看this 示例,并比较其余代码(变量和占位符定义、数据张量形状等)。 -
这段代码运行除了 eval 部分。看来,Argmax 应该采用预测和实际标签或标签占位符。想知道为什么这不起作用...
-
只是一件事,argmax
train_labels_node的参数不应该与您在 feed_dict 中使用的参数相同(您只有train_labels吗? -
我会尝试澄清 argmax,它可能会有所帮助:当您使用时,每次调用到达的应该是一个 2D 矩阵,每一行是一个样本,每一列是一个概率sample 属于第 ith-column 类(
train labels每个样本应该只有一列设置为 1,train_prediction是类之间的概率分布)。因此,equal正在为每个样本比较具有最高值的列的索引,返回一个布尔列。 -
是的,对于您的设置,您应该使用 one-hot 编码。 Argmax 在那里什么都不做。否则你将不得不改变你的准确度函数(在预测中使用一个阈值,从中创建一个零和一的向量,现在你可以直接应用 tf.equals。
标签: tensorflow