【问题标题】:InvalidArgumentError: Expected dimension in the range [-1, 1) but got 1InvalidArgumentError:预期维度在 [-1, 1) 范围内,但得到 1
【发布时间】:2017-11-28 04:43:11
【问题描述】:

我不确定这个错误是什么意思。当我尝试计算acc时出现此错误:

acc = accuracy.eval(feed_dict = {x: batch_images, y: batch_labels, keep_prob: 1.0})

我已尝试查找解决方案,但在网上找不到任何解决方案。关于导致我的错误的任何想法?

这是link to my full code

【问题讨论】:

  • 改用keep_prob: 0.98
  • []() 在端点是否包含方面有所不同。因此,上面的语法表明-1 是一个有效值,但1 不是。
  • 嗯。我们至少有一个other instance of this question,但没有答案;在我们欺骗他们之前,需要回答其中一个或另一个。
  • 我认为错误是说变量 acc 是被评估的张量 accuracy 的维度为 1,但它应该在 [-1, 1) 范围内。有 [-1, 1) 维度是什么意思?
  • 可能是同一个问题希望对您有所帮助enter link description here

标签: python machine-learning tensorflow image-recognition data-science


【解决方案1】:

对于Tensorflow服务Estimator加载的人来说,出现这个错误是因为特征字典中的值需要成批的。

data = {
        "signature_name": "predict",
        "inputs": {k:[v] for k,v in inputs.items()}
    }

【讨论】:

    【解决方案2】:

    产生这个错误的源代码如下:

    OP_REQUIRES(context, axis >= 0 && axis < input_dims,
                errors::InvalidArgument("Expected dimension in the range [",
                                        -input_dims, ", ", input_dims,
                                        "), but got ", dim));
    

    请注意,axis 必须小于 input_dims不小于或等于

    这符合消息中的语法[-1,1)[ 表示包含值(这样-1 有效),而) 表示排除值(将1 本身放在范围之外) .

    【讨论】:

    • 那么这是否意味着acc的维度是1,但应该在[-1, 1)范围内?尺寸在该范围内是什么意思?
    • @mdlee6,等于或大于-1,小于1。
    • 是的,所以预期的尺寸应该等于或大于-1,小于1,但是acc的尺寸却是1。尺寸相等是什么意思等于或大于 -1,小于 1?
    • 偶然发现了这个。我是唯一一个认为必须使用-1 而不是最后一个维度的索引的人吗,如果知道的话,是非常违反直觉的吗?
    • 是的,有人需要更新此异常消息。这很混乱。
    【解决方案3】:

    我遇到了类似的错误,但对我来说问题是我试图在一维向量上使用 argmax。所以我的标签的形状是 (50,) 并且我在评估时试图做一个 tf.argmax(y,1) 。解决方案参考Tensorflow: I get something wrong in accuracy

    【讨论】:

      【解决方案4】:

      对于类似的代码

      tf.equal(tf.argmax(y, 1), tf.argmax(labels, 1))
      

      计算准确率时经常用到,可以改成

      tf.equal(tf.argmax(y, -1), tf.argmax(labels, -1))
      

      根据源码:

      // tensorflow/compiler/tf2xla/kernels/index_ops_cpu.cc:58
      OP_REQUIRES(ctx, axis >= 0 && axis < input_dims,
                  errors::InvalidArgument("Expected dimension in the range [",
                                          -input_dims, ", ", input_dims,
                                          "), but got ", dim));
      

      【讨论】:

        【解决方案5】:

        我解决了这个问题。 检查batch_labels的表达式

        # if use one hot code use
        # y_true_cls = tf.argmax(y_true, dimension=1)
        
        # if not one hot code use
        y_true_cls = y_true
        

        希望对你有所帮助

        【讨论】:

        猜你喜欢
        • 2019-11-25
        • 1970-01-01
        • 2021-07-03
        • 2021-05-05
        • 2018-06-30
        • 2021-08-26
        • 2022-12-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多