到目前为止,我已经在TensorFlow(使用Keras)中训练了几个不同的模型,并且我发现正确设置batch_size似乎不仅对训练速度而且对模型的最终准确性都很重要。
让我感到困惑的是,一个模型在输入(和输出)上都有一个实际的批处理通道作为第一维。如果我的批处理大小为32,但是我总是在运行时输入1个数据,那么批处理通道在哪里应用?如果我固有地仅在前向传递中使用1 / batch_size的数量,该如何利用它的绝大部分?
如果您对我正在研究的模型感到好奇,那就是这个模型:
https://github.com/pierluigiferrari/ssd_keras/blob/master/models/keras_ssd300.py 看到:
predictions
的输出形状:(批,n_boxes_total,n_classes + 4 + 8)predictions = Concatenate(axis=2, name='predictions')([mbox_conf_softmax, mbox_loc, mbox_priorbox])
张量遍历了许多其他具有常数的层,并且这些层也已通过[batch_size]进行了预训练。在我看来,各种批次索引的输入将不得不产生不同的结果。也许我只需要指出一些显而易见的东西即可。
答案 0 :(得分:0)
似乎在训练之后,您必须重新编译批处理大小为1的模型,然后将权重从训练模型转移到新模型进行评估。另一种选择是一次执行预测的“ batch_size”计数(当然,对于每个应用程序并不总是可行的)。如果有其他选择(或者我看错了),请随时添加答案。