InvalidArgumentError:预期维度在 [-1, 1) 范围内,但得到 1

Posted

技术标签:

【中文标题】InvalidArgumentError:预期维度在 [-1, 1) 范围内,但得到 1【英文标题】:InvalidArgumentError: Expected dimension in the range [-1, 1) but got 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 【参考方案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

希望对你有所帮助

【讨论】:

这并没有给出问题的答案,任何人都无法访问您的链接。这个问题的正确答案可以在这里找到:***.com/questions/44581910/…

以上是关于InvalidArgumentError:预期维度在 [-1, 1) 范围内,但得到 1的主要内容,如果未能解决你的问题,请参考以下文章

InvalidArgumentError:维度 0 的切片索引 5 超出范围。 [Op:StridedSlice] 名称:strided_slice/

InvalidArgumentError: 预期 'tf.Tensor(False, shape=(), dtype=bool)' 为真

预期输入有 4 个维度,但得到的数组具有形状

Keras 维度 LSTM net 3 dim 预期

sklearn 维度问题“找到暗淡 3 的数组。预期的估计器 <= 2”

InvalidArgumentError:没有注册 OpKernel 来支持 Op 'CudnnRNN'