使用Tensorflows c ++ API时,使用大于1的批量大小

时间:2016-07-06 09:59:02

标签: c++ tensorflow

我有一个用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

当我冻结图表时,某些地方必定会发生什么?

1 个答案:

答案 0 :(得分:1)

这对我来说是个愚蠢的错误。获取图表的输出时,我在其上调用了.scalar<float>()。当我只有一个输入图像时,这种方法非常好,因此只有一个输出,但显然我无法将矢量转换为标量。将其更改为.flat<float>()修复了我的问题。