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

时间:2017-06-24 21:29:46

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

我不确定这个错误意味着什么。当我尝试计算acc

时会发生此错误
acc = accuracy.eval(feed_dict = {x: batch_images, y: batch_labels, keep_prob: 1.0})

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

这里是link to my full code

5 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

生成此错误的源代码如下:

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有效),而)表示独占值(put {} 1本身超出范围。)

答案 2 :(得分:1)

对于要进行 Tensorflow服务估算器加载的人员,发生此错误是因为功能字典中的值需要成批分配。

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

答案 3 :(得分: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));

答案 4 :(得分:-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

希望能有所帮助