【问题标题】:Tensorflow error: Minimum tensor rank: 1 but got: 1Tensorflow 错误:最小张量等级:1 但得到:1
【发布时间】: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


【解决方案1】:

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

问题出现是因为train_labels(大概)是一个一维向量。维度从 0 开始编号,因此向量只有第 0 个维度,但您对 tf.argmax(train_labels, 1) 的调用会尝试获取第 1 个维度中的 argmax,但它不存在。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多