在 Tensorflow C++ 中使用 FIFOQueue 时遇到问题
Trouble using FIFOQueue in Tensorflow C++
我在 tensorflow 中使用这种编程格式与其他操作取得了一些成功,但我无法让 FIFOQue 正常工作。 以下代码将编译并运行,但队列中永远不会放置任何数据。
vector<Tensor> outputs;
Scope root = Scope::NewRootScope();
auto queue = FIFOQueue(root, {DT_STRING}, FIFOQueue::Capacity(4));
auto enqueue = QueueEnqueue(root, queue, {{"test_string"}});
auto queue_size = QueueSize(root.WithOpName("queue_size"), queue);
unique_ptr<Session> session(NewSession(SessionOptions()));
GraphDef graph;
root.ToGraphDef(&graph);
session->Create(graph);
Status status = session->Run({}, {"queue_size"}, {}, &outputs);
if (status.ok()) {
if (outputs.size() > 0) {
cout << outputs[0].DebugString();
}
}
QueueSize 总是导致零,如果我尝试使用队列中的数据,程序会挂起,我推测是因为队列是空的。 如果你有任何线索,请帮忙,我已经尝试了我能想到的一切。
非常感谢。
我实际上非常接近,但对通话的性质有一些误解。 图形中的每个操作都从队列开始,因此需要重复调用会话>Run请求适当的输出才能实现队列的操作。 下面是一个稍微更详细的示例。 它使用占位符将两个值推送到队列,然后检查大小,然后从队列中弹出两个值。
vector<Tensor> result_1;
vector<Tensor> result_2;
vector<Tensor> result_3;
Scope root = Scope::NewRootScope();
Placeholder dummy(root.WithOpName("dummy"), DT_INT32);
FIFOQueue queue(root.WithOpName("queue"), {DT_INT32});
QueueEnqueue enqueue(root.WithOpName("enqueue"), queue, {dummy.output});
QueueDequeue dequeue(root.WithOpName("dequeue"), queue, {DT_INT32});
QueueClose close(root.WithOpName("close"), queue);
QueueClose cancel(root.WithOpName("cancel"), queue, QueueClose::CancelPendingEnqueues(true));
QueueSize size(root.WithOpName("size"), queue);
GraphDef graph_def;
unique_ptr<Session> session(NewSession(SessionOptions()));
TF_RETURN_IF_ERROR(root.ToGraphDef(&graph_def));
TF_RETURN_IF_ERROR(session->Create(graph_def));
Tensor t(1984);
pair<string, Tensor> val = {"dummy", t};
TF_RETURN_IF_ERROR(session->Run({val}, {}, {"enqueue"}, nullptr));
TF_RETURN_IF_ERROR(session->Run({val}, {}, {"enqueue"}, nullptr));
TF_RETURN_IF_ERROR(session->Run({}, {"size"}, {}, &result_3));
TF_RETURN_IF_ERROR(session->Run({}, {"dequeue"}, {}, &result_1));
TF_RETURN_IF_ERROR(session->Run({}, {"dequeue"}, {}, &result_2));
int value_1 = *result_1[0].scalar<int>().data();
int value_2 = *result_2[0].scalar<int>().data();
int value_3 = *result_3[0].scalar<int>().data();
TF_RETURN_IF_ERROR(session->Run({}, {}, {"close"}, nullptr));
cout << "returned value_1: " << value_1 <<
" return value_2: " << value_2 <<
" size was: " << value_3 << endl;
return Status::OK();
相关文章:
- 编译包含字符串的代码时遇到问题
- 遇到新行时,有没有办法停止istream_iterator
- 在使用GPU支持编译Tensorflow时,会遇到CUDA_TOOLKIT_PATH未绑定变量
- 如何在C++向量中奇数元素前面加上值-1,我在使用insert函数时遇到了问题
- 在 for 循环中查找问题时遇到困难
- 创建结构的数组时遇到分段错误
- 代码在我的计算机上运行良好,但是在将其提交给coursera时遇到未知的信号11问题
- 为什么我遇到分段错误?
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- 这些是什么样的错误?即使我不在 Linux 上工作,我也遇到了 Linux 错误
- 为什么我在尝试模板时遇到视觉工作室C++错误
- 如何从文本文件中读取数值,直到遇到字符类型?
- 从其他类访问类时遇到问题
- 我已经阅读了很多关于 2d 数组的信息,但我在作业中使用它时遇到了麻烦
- 打印问题.我在数组中打印值时遇到一些问题
- 使用静态成员声明类时遇到问题
- 创建 Spdlog 异步文件记录器时遇到困难
- C++ 填充数组时遇到问题
- 遇到此问题时遇到困难:允许用户输入数组的值并使用 for,而循环也输出输入的最大数字
- 在 Tensorflow C++ 中使用 FIFOQueue 时遇到问题