2017-10-17 97 views
1

我使用卷积网络对不同形状的图像进行分类。我找不到在Tensorflow中加载图像的方法。基于this issue它应该与tf.data.Dataset()一起使用。我用这种方式产生的数据集:不同形状的Tensorflow数据集

dataset = tf.data.Dataset.from_tensor_slices(filenames) 
    dataset = dataset.map(read_file) 
    dataset = dataset.shuffle(samples_in_buffer) 
    dataset = dataset.batch(batch_size) 
    dataset = dataset.repeat() 

执行时我收到此错误

HandleElementToSlice Cannot copy slice: number of elements does not match. Shapes are: [element]: [295,256,3], [parent slice]: [276,128,3] 

是否有可能以不同的尺寸,随机播放和他们使用Tensorflow批量加载图像?

备注:我想使用空间金字塔池来处理不同的图像大小。

回答

1

dataset.batch()正在努力打造从不同大小(你的不同大小的图像)的张量密集批,这里提到:tf.contrib.data.DataSet batch size can only set to 1

你的代码很可能如果任1.要设置工作batch_size = 1或2.将所有图像调整为相同的大小,例如在你的read_file函数中使用tf.image.resize_image_with_crop_or_pad()。

另一种选择是使用dataset.padded_batch(...)而不是dataset.batch并指定padded_shape,使所有图像具有相同的大小(包括填充),即可能dataset.padded_batch(batch_size,padded_shape = [无])。

最后,在即将发布的TF r1.4中,您可以使用dataset.from_generator()。