使用 Tensorflows c++ API 时使用大于 1 的批处理大小
Using a batchsize greater than 1 when using Tensorflows c++ API
我有一个用Python训练的Tensorflow模型,并用freeze_graph
脚本冻结。我已经成功地用 c++ 加载了模型,并对单个图像进行了推理。但是,似乎freeze_graph一次只能将 batchsize 设置为单个图像,因为我无法向模型传递具有多个图像的张量。
有谁知道改变这种情况的方法?我无法找到它在脚本中实际发生的位置。
谢谢!
编辑:
好的,所以我废弃了 Keras,只是为了消除任何可能正在做的黑魔法,并且在使用 Tensorflow 定义网络时,我将批处理大小设置为 16。
如果我打印图形 def,占位符有一个形状:
node {
name: "inputs"
op: "Placeholder"
attr {
key: "dtype"
value {
type: DT_FLOAT
}
}
attr {
key: "shape"
value {
shape {
dim {
size: 16
}
dim {
size: 50
}
dim {
size: 50
}
dim {
size: 3
}
}
}
}
}
但是,当我尝试使用形状为 16 x 50 x 50 x 3 的张量在 c++ 中加载和运行模型时,出现此错误:
tensorflow/core/framework/tensor.cc:433] Check failed: 1 == NumElements() (1 vs. 16)Must have a one element tensor
冻结图形时,某处一定发生了什么?
事实证明,
这是我的一个愚蠢错误。获取图形的输出时,我调用了.scalar<float>()
。当我只有一个输入图像,因此只有一个输出时,这工作得很好,但显然我无法将矢量转换为标量。将其更改为.flat<float>()
解决了我的问题。
相关文章:
- 如何在 SEAL 3.1 中使用 CRT 批处理技术Microsoft?
- 批处理归一化层构造
- 多 GPU 批处理 1D FFT:似乎只有一个 GPU 可以工作
- CStdioFile 不能处理大于 2GB 的文件?
- 我们在批处理模式下使用 G++ 时遇到错误
- 如何在 c++ 窗口中将参数和返回的退出值传递到批处理文件/从批处理文件获取返回的退出值
- 从之前添加的批处理文件中删除单词
- 使用qprocess将参数传递给批处理
- 从批处理中提取矩阵,表示为张量
- 无法从C++ Windows 服务执行批处理文件
- 为什么 CSpinButtonCtrl 不能正确处理大于 1000 的数字?
- 如何将批处理文件的输出读取到C 中的字符串中
- cmake:生成批处理文件调用cl.exe
- 是否可以使用开发控制台使用批处理脚本编译 c++
- 用于批处理分配的库
- 在调用进程的上下文中通过 win32 执行批处理,从而保留环境变量
- 如何运行批处理文件和读取输出
- 嵌入批处理脚本文件并在C 控制台项目中运行
- GetCommandLine():无法从批处理文件(GCC-Compiler)传递多行参数
- 使用 Tensorflows c++ API 时使用大于 1 的批处理大小