我有一个用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
当我冻结图表时,某些地方必定会发生什么?
答案 0 :(得分:1)
这对我来说是个愚蠢的错误。获取图表的输出时,我在其上调用了.scalar<float>()
。当我只有一个输入图像时,这种方法非常好,因此只有一个输出,但显然我无法将矢量转换为标量。将其更改为.flat<float>()
修复了我的问题。