Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow错误:最小张量秩:1,但得到:1_Tensorflow - Fatal编程技术网

Tensorflow错误:最小张量秩:1,但得到:1

Tensorflow错误:最小张量秩:1,但得到:1,tensorflow,Tensorflow,我在尝试评估模型时遇到以下错误 tensorflow.python.framework.errors.InvalidArgumentError:最小张量秩:1但得到:1[[Node:ArgMax\u 1=ArgMax[T=DT\u INT64,\u device=“/job:localhost/replica:0/task:0/cpu:0”](\u recv\u占位符\u 1\u 0,ArgMax\u 1/dimension/\u 40)]] 这是相关代码 # Predict

我在尝试评估模型时遇到以下错误


tensorflow.python.framework.errors.InvalidArgumentError:最小张量秩:1但得到:1[[Node:ArgMax\u 1=ArgMax[T=DT\u INT64,\u device=“/job:localhost/replica:0/task:0/cpu:0”](\u recv\u占位符\u 1\u 0,ArgMax\u 1/dimension/\u 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)没有太大帮助

错误消息不是很好,但是查看可能可以解释发生了什么

这个问题的产生是因为
train_标签
可能是一个一维向量。维度从0开始编号,因此向量只有第0个维度,但是调用
tf.argmax(train\u labels,1)
会尝试获取第一个维度中的argmax,该维度不存在

事实上,根本不需要使用标签的argmax。相反,您可以简单地编写:

correct_prediction = tf.equal(tf.argmax(train_prediction, 1), train_labels)

据我所见,如果函数
get\u batch()
返回具有正确形状的张量,那么这似乎很好。试着看一看示例,并比较代码的其余部分(变量和占位符定义、数据张量形状等)。Argmax似乎应该接受预测和实际标签或标签占位符。想知道为什么这不起作用…只是一件事,argmax
train\u labels\u node
的参数不应该与您在提要中使用的参数相同吗(如果您有简单的
train_标签
?我将尝试澄清argmax,它可能会有所帮助:在您使用时,到达每个调用的应该是一个2D矩阵,每行是一个样本,每列是样本属于第I列的概率(
train标签
对于每个样本应仅将一列设置为1,并且
train\u预测
类别之间的概率分布)。因此,
equal
正在比较每个示例中具有最高值的列的索引,返回一个布尔列。是的,对于您的设置,您应该使用一个热编码。Argmax在其中不起任何作用。否则,您必须更改精度函数(要在预测中使用阈值,从中创建一个0和1的向量,现在可以直接应用tf.equals。