Python Tensorflow中从图像列表中提取批次

Python Tensorflow中从图像列表中提取批次,python,image,tensorflow,training-data,Python,Image,Tensorflow,Training Data,我有一个imagestry列表,用于使用自定义图像训练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.]

我有一个imagestry列表,用于使用自定义图像训练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)
批次大小=1时

我得到的整个图像输出与上面打印的整个列表图像相同。 我是Tensorflow的新手,欢迎提供任何提示。

简短回答: 对于您要求的内容,您应该添加enqueue_many=True

长答覆: 通常使用tf.train.batch从单个项张量(例如来自队列)创建批

所以你可以给它输入一个图像张量[256,256,3],然后得到一个批量张量[batch_size,256,256,3]

它通常不用于从列表张量中分割批次。如果这样使用的话,您必须将所有的图像加载到内存中,这样就不能很好地扩展

这至少是默认值,enqueue_many=False:

如果enqueue_many为False,则假定张量表示单个 实例形状为[x,y,z]的输入张量将作为 形状张量[批量大小,x,y,z]

如果确实要将所有图像加载到内存中,可以将enqueue_many=True添加到tf.train.batch调用中

如果enqueue_many为真,则假设张量表示一批 示例,其中第一个维度按示例索引,以及所有 张量的成员在第一维度应该具有相同的大小。 如果输入张量具有形状[*,x,y,z],则输出将具有形状 [批次大小,x,y,z]。capacity参数控制存储的时间长度 允许预取来增加队列


我建议阅读更多指南,现在记录使用数据集的新推荐方法,而不是以前推荐的队列-您可以直接从数据集创建批,而不是调用tf.train.batch。

谢谢您的回答!如果有人能为此提供一个简单的程序/示例,我将不胜感激。