【问题标题】:Extracting batches from image list in Tensorflow从 Tensorflow 中的图像列表中提取批次
【发布时间】:2017-12-21 10:03:11
【问题描述】:

我有一个图像列表(尝试使用自定义图像训练 CNN 模型),由以下人员定义和重塑:

reader.images = tf.reshape(self.images, [-1, 256, 256, 3])

哪些打印:

reader.Images :
[[[[ 127.  255.  127.]
   [ 140.  255.  114.]
   [ 217.  255.   38.]
  ..., 
  [[ 255.  240.    0.]
   [ 255.  241.    0.]
   [ 249.  246.    6.]
   ..., 
   [ 203.  237.   52.]
   [ 152.  251.  102.]
   [ 143.  253.  111.]]

  [[ 255.  184.    0.]
   [ 248.  192.    7.]
   [ 205.  242.   50.]
   ..., 
   [ 255.  139.    0.]
   [ 255.  171.    0.]
   [ 255.  177.    0.]]

  [[ 255.  178.    0.]
   [ 237.  187.   18.]
   [ 131.  240.  124.]
   ..., 
   [ 255.  123.    0.]
   [ 255.  156.    0.]
   [ 255.  162.    0.]]]]

我想通过每次迭代提取一批来训练我的模型。但是当我使用时:

image_batch = tf.train.batch(
        [reader.images], batch_size=batch_size, dynamic_pad=True)

batch_size =1

我将整个图像作为输出(与上面打印的整个列表图像相同)。 我是 TensorFlow 的新手,所以欢迎任何提示。

【问题讨论】:

    标签: python image tensorflow training-data


    【解决方案1】:

    简答:

    对于您的要求,您应该添加enqueue_many=True

    长答案:

    tf.train.batch 通常用于从来自例如队列的单项张量创建批次。

    因此,您可以使用图像张量 ([256, 256, 3]) 输入它并得到一个批处理张量 ([batch_size, 256, 256, 3])。

    它通常不用于从列表张量中切出批次。如果以这种方式使用,则必须将所有图像加载到内存中,这样的可扩展性不高。

    这至少是默认值,enqueue_many=False

    如果 enqueue_many 为 False,则假定张量表示单个 例子。形状为 [x, y, z] 的输入张量将输出为 形状为 [batch_size, x, y, z] 的张量。

    如果您真的想将所有图像加载到内存中,您可以将enqueue_many=True 添加到tf.train.batch 调用中。

    如果 enqueue_many 为 True,则假定张量代表一批 示例,其中第一个维度按示例索引,并且所有 张量的成员在第一维中应该具有相同的大小。 如果输入张量具有形状 [*, x, y, z],则输出将具有形状 [batch_size,x,y,z]。容量参数控制多长时间 允许预取增加队列。

    我建议阅读https://www.tensorflow.org/programmers_guide/datasets 以获得进一步的指导(现在记录使用数据集而不是以前推荐的队列的新推荐方式 - 您可以直接从数据集创建批处理,而不是调用 tf.train.batch)。

    【讨论】:

    • 感谢您的回答!如果有人可以为此提供一个简单的程序/示例,我将不胜感激。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    • 2016-10-07
    • 2010-09-15
    • 2013-08-12
    • 2019-02-06
    • 2016-09-05
    相关资源
    最近更新 更多