python - 在图张量流中未找到在 feed_devices 或 fetch_devices 中指定的
问题描述
我使用 tensorflow C++ API。我在 GPU 上训练模型并执行此代码(用于预测)
#include<iostream>
using namespace tensorflow;
tensorflow::Tensor loadImage(tensorflow::string fname){
tensorflow::int32 width = 224;
tensorflow::int32 height = 224;
tensorflow::int32 nData = 1;
tensorflow::int32 nVec = width*height;
tensorflow::int32 channels = 3;
auto tensor = tensorflow::Tensor(tensorflow::DT_FLOAT, tensorflow::TensorShape({1, height, width, channels}));
auto mat = tensor.tensor<float, 4>();
std::ifstream fin(fname, std::ios_base::in | std::ios_base::binary);
assert(!fin.fail());
boost::iostreams::filtering_istream s;
s.push(fin);
char c;
for(int i=0;i<nData;i++){
for(int h=0;h<height;h++){
for(int w=0;w<width;w++){
for(int j=0;j<channels;j++){
s.get(c);
mat(i, h, w, j) = static_cast<float>(static_cast<uint8_t>(c)) / 255.0;
}
}
}
}std::cout << "Image Loaded" << std::endl;
return tensor;
}
int main(int argc, char* argv[]) {
Session* session;
Status status = NewSession(SessionOptions(), &session);
if (!status.ok()) {
std::cout << status.ToString() << "\n";
return 1;
}
GraphDef graph_def;
status = ReadBinaryProto(Env::Default(), "graph.pb", &graph_def);
if (!status.ok()) {
std::cout << "Status Not OK" << std::endl;
std::cout << status.ToString() << "\n";
return 1;
}
else{
std::cout << "Graph Loaded" << std::endl;
}
status = session->Create(graph_def);
if (!status.ok()) {
std::cout << status.ToString() << "\n";
return 1;
}
else{
std::cout << "Create End" << std::endl;
}
std::string fname = "test.jpg";
tensorflow::Tensor img = loadImage(fname);
std::vector<std::pair<tensorflow::string, tensorflow::Tensor>> inputs = {{"img0001", img }};
std::vector<tensorflow::Tensor> outputs;
std::cout << "Start Run" << std::endl;
status = session->Run(inputs, {"output_node0"}, {}, &outputs);
std::cout << "End Run" << std::endl;
if (!status.ok()) {
std::cout << status.ToString() << "\n";
return 1;
}
std::cout << outputs[0].DebugString() << "\n";
std::cout << output_c() << "\n"; // 30
session->Close();
return 0;
}
但是,我遇到了这样的未知错误。
Invalid argument: Tensor img0001:0, specified in either feed_devices or fetch_devices was not found in the Graph
此错误发生在此代码中。
session->Run(inputs, {"output_node0"}, {}, &outputs);
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/common_runtime/graph_execution_state.cc 在此站点解释当节点名称不相等时会发生此错误。我通过 keras 创建模型,而不是 tensorflow。所以,我通过这段代码将模型从 keras 转换为 tensorflow。 https://github.com/icchi-h/keras_to_tensorflow/blob/master/keras_to_tensorflow.py
我猜它与 GPU 训练有关。 https://github.com/tensorflow/tensorflow/issues/5902
但是,我无法证实这一点。
请教我解决这个问题。
解决方案
推荐阅读
- xcode - 如何仅在 Xcode 中为控制台启用换行?
- php - Symfony 学说并发查询和操作
- python - 尝试使用 while 循环时出现回溯错误和“'int' 类型的参数不可迭代”
- python - 如何使用 pandas 和 matplotlib.pyplot 绘制半大型数据集(约 20k 点)?有没有更好的绘图工具?
- unity3d - Unity2D如何识别同一标签下的不同精灵?
- rsa-archer-grc - 如何识别包含自定义对象的所有 Archer 应用程序/问卷
- reactjs - 如何修复 Next.js Vercel 部署模块未找到错误
- ssl - 是否可以从 HTTPS 向 HTTP 发出跨域 javascript 请求?
- elf - 多个ELF程序头是什么意思
- javascript - 如何与来自 Cheerp/js 的外部变量交互?