参数错误:期望的维度在范围[-1, 1)内,但实际得到了1。

9

我不确定这个错误的含义。当我尝试计算acc时会发生这个错误:

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

我尝试查找解决方案,但在网上找不到任何答案。你有什么想法是什么导致了我的错误?

这是我完整代码的链接


1
请尝试使用 keep_prob: 0.98 - Hugh Bothwell
[]()在端点是否包含的方面有所不同。因此,上述语法表示-1是一个有效值,但1不是。 - Charles Duffy
哦,我们至少有一个这个问题的其他实例,但没有答案;在我们可以将它们重复之前,其中一个需要被回答。 - Charles Duffy
1
我认为错误提示的意思是变量 acc 是一个张量 accuracy 正在被求值,它的维度为1,但它应该在范围[-1, 1)内。什么是维度为[-1,1)? - mdlee6
也许这是相同的问题 希望有所帮助 进入链接描述 - pinetree
也许这是同样的问题 希望有所帮助 同样的问题 - pinetree
5个回答

3
对于寻求Tensorflow服务或加载Estimator的用户来说,此错误是因为特征字典中的值需要批量处理。
data = {
        "signature_name": "predict",
        "inputs": {k:[v] for k,v in inputs.items()}
    }

2

我曾经遇到过类似的错误,但问题出在我试图在一个一维向量上使用argmax。因此我的标签形状为(50,),而在评估时我尝试对其执行tf.argmax(y,1)。解决方案参考Tensorflow: I get something wrong in accuracy


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
@mdlee6,大于等于-1,小于1。 - Charles Duffy
是的,预期的维度应该等于或大于-1,小于1,但acc的维度为1。什么意思是维度等于或大于-1,小于1? - mdlee6
偶然发现这个问题。我是不是唯一一个认为,如果已知最后一个维度的索引,必须使用“-1”而不是索引本身,这样做非常不直观? - GPhilo
1
是的,有人需要更新这个异常信息。它非常令人困惑。 - Maksym Bondarenko

0

对于像这样的代码

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));

-1

我解决了这个问题。 检查一下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

希望能有所帮助


这并没有回答问题,而且你的链接无法访问。这个问题的正确答案可以在这里找到:https://stackoverflow.com/questions/44581910/tensorflow-i-get-something-wrong-in-accuracy - Roshini

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接