C++ 检查失败:1==NumElements()(1对1792)在Tensorflow C+中必须有一个单元素张量+;

C++ 检查失败:1==NumElements()(1对1792)在Tensorflow C+中必须有一个单元素张量+;,c++,tensorflow,C++,Tensorflow,在Python代码中,图像数据被分配给tensor image_batch: 守则的一部分: image_data = misc.imread(image_path) image_batch = graph.get_tensor_by_name("input:0") phase_train_placeholder = graph.get_tensor_by_name("phase_train:0") embeddings = graph.get_tens

在Python代码中,图像数据被分配给tensor image_batch:

守则的一部分:

image_data = misc.imread(image_path)

image_batch = graph.get_tensor_by_name("input:0")
phase_train_placeholder = graph.get_tensor_by_name("phase_train:0")
embeddings = graph.get_tensor_by_name("embeddings:0")

feed_dict = {image_batch: np.expand_dims(image_data, 0), phase_train_placeholder: False}
rep = sess.run(embeddings, feed_dict=feed_dict)
C++代码:

const float * source_data = (float*) image.data;
Tensor image_batch(DT_FLOAT, TensorShape({1, 160, 160, 3}));
auto input = image_batch.tensor<float, 4>();
for (int y = 0; y < height; ++y) {
    const float* source_row = source_data + (y * width * depth);
    for (int x = 0; x < width; ++x) {
        const float* source_pixel = source_row + (x * depth);
        for (int c = 0; c < depth; ++c) {
            const float* source_value = source_pixel + c;
            //std::cout << *source_value << std::endl;
            input(0, y, x, c) = *source_value;
        }
    }
}
Tensor phase_train(DT_BOOL, TensorShape());
phase_train.scalar<bool>()() = false;

std::vector<std::pair<string, tensorflow::Tensor>> inputs = {
    { "input:0", image_batch },
    { "phase_train:0", phase_train },
};    
std::vector<Tensor> outputs;
Status run_status = session->Run(inputs, {"embeddings:0"}, {}, &outputs);
if (!status.ok()) {
    std::cout << status.ToString() << "\n";
    return 1;
}

auto output_c = outputs[0].scalar<float>(); //Error here

std::cerr << "SHOW\n";
// Print the results
std::cout << outputs[0].DebugString() << "\n";
std::cout << output_c() << "\n"; // 30
const float*source_data=(float*)image.data;
张量图像(DT_FLOAT,张量形状({1,160,160,3}));
自动输入=image_batch.tensor();
对于(int y=0;y//在那之前,我犯了一个愚蠢的错误,没有找到关键的错误代码

auto output_c = outputs[0].scalar<float>();
auto output_c=outputs[0]。scalar();
替换:

auto output_c = outputs[0].flat<float>();
auto output_c=outputs[0].flat();
所有的问题都解决了

(提示我检查什么代码)


@Aziuth谢谢。

猜测一下,可能是文件未正确读取,因此张量未正确构造?您是否尝试使用调试器或类似工具隔离错误?或打印相关对象的当前状态?是的,错误消息来自status.ToString(),是否有其他方法可以查看更详细的状态?这是我收到的最隐秘的错误。感谢您指出这一点。