张量流中的动态批量大小

Posted

技术标签:

【中文标题】张量流中的动态批量大小【英文标题】:Dynamic batch size in tensorflow 【发布时间】:2019-04-24 15:03:14 【问题描述】:

我已经使用 tesnorflow 构建了一个分类器。我从图像生成提案区域,这些提案由我的分类器单独分类。

我的问题是在评估我的模型时我没有恒定的批量大小。因为每张图片都有不同数量的proposal,所以每张图片要评估的proposal数量不是恒定的。

现在我已将批量大小设置为 1,但这效率低下并且限制了我的分类器的处理速度。

下面是模型输入的占位符

self.image_op = tf.placeholder(tf.float32, shape=[batch_size, 48, 48, 3], name='input_image')

这就是我将输入提供给模型的方式

def predict(self,image):
    cls_prob = self.sess.run([self.cls_prob], feed_dict=self.image_op: image)
    return cls_prob

有没有什么方法可以将批量大小设置为动态值,而不必为每个图像恢复模型?

【问题讨论】:

尝试使用 self.image_op = tf.placeholder(tf.float32, shape=[None, 48, 48, 3], name='input_image')。它应该采用可变的批量大小 这行得通。谢谢! 【参考方案1】:

你可以简单地设置tf.Variable(validate_shape=False)

这将禁用迭代中的形状验证,因此您将能够使用动态批量大小。

由于 tf.placeholder 正在被贬值,你不应该使用它,但如果你仍然想使用 tf.placeholder 那么你需要禁用 TF 2.x 行为

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

【讨论】:

以上是关于张量流中的动态批量大小的主要内容,如果未能解决你的问题,请参考以下文章

张量流中的批量标准化 - tf.contrib.layers.batch_norm 在训练中效果很好,但测试/验证结果很差

Keras:构造一个与给定张量具有相同批量大小的完整张量

张量流中的条件图和访问张量大小的for循环

pytorch 中张量的 Autograd.grad()

TensorFlow:如何测量每个张量占用多少 GPU 内存?

PyTorch 中的连接张量