我有一个训练有素的网络输入:
input = tf.placeholder(dtype=tf.float32, shape=(None, width, height, channels), name='input')
在实践中,我希望能够使用变量 batch_size 进行预测(最大批量大小 batch_max ,比如100),即
imgs = get_batch(batch_size=1)
session.run([output], feed_dict={'input:0': imgs})
imgs = get_batch(batch_size=100)
session.run([output], feed_dict={'input:0': imgs})
现在我发现了以下行为:
imgs_batch1 = get_batch(batch_size=1)
imgs_batch100 = get_batch(batch_size=100)
session.run([output], feed_dict={'input:0': imgs_batch1})
session.run([output], feed_dict={'input:0': imgs_batch100}) # takes 1.5s
session.run([output], feed_dict={'input:0': imgs_batch100}) # takes 1.0s
session.run([output], feed_dict={'input:0': imgs_batch1})
session.run([output], feed_dict={'input:0': imgs_batch100}) # takes 1.5s
session.run([output], feed_dict={'input:0': imgs_batch100}) # takes 1.0s
否则说,更改批量大小会降低评估速度。批量大小的第一次评估明显慢于相同批次大小的直接评估。
这听起来很合理,我可以找到合理的理由,为什么会出现这种情况。但鉴于我知道将作为输入发送的最大批量大小,是否有一个更聪明的方法来实现这一点而不会在发送批量1的批次后立即放慢速度?
由于
答案 0 :(得分:0)
您可以尝试填充批次,即创建一个满0的示例,如果批次小于max_size,则将其多次放入批处理中。当你得到结果时,只丢弃来自虚拟例子的那些。