我将我的keras模型拟合到图像样本及其对应的二进制掩码上以进行对象检测。基本上,我在this page:
的末尾跟随了这个例子from keras.preprocessing.image import ImageDataGenerator
# we create two instances with the same arguments
data_gen_args = dict(
rotation_range=4.,
width_shift_range=0.05,
height_shift_range=0.05,
shear_range=0.05,
zoom_range=0.05,
horizontal_flip=True, fill_mode='nearest')
image_datagen = ImageDataGenerator(**data_gen_args)
mask_datagen = ImageDataGenerator(**data_gen_args)
seed = 2019
现在为图像和蒙版创建生成器:
target_size = (180, 320)
small_target_size = (11,20)
batch_size = 8
image_generator_trn = image_datagen.flow_from_directory(
path+'train',
class_mode=None,
target_size = target_size,
batch_size = batch_size,
shuffle= False,
seed=seed)
mask_generator_trn = mask_datagen.flow_from_directory(
path+'mask/train',
class_mode=None,
target_size = small_target_size,
batch_size = batch_size,
shuffle= False,
seed=seed)
Outpu:
Found 3327 images belonging to 2 classes.
Found 3327 images belonging to 2 classes.
最后,我们创建了一个在model.fit_generator
中使用的生成器:
train_generator = zip(image_generator_trn, mask_generator_trn)
我的问题是最后一行(压缩);我得到内存异常或者它没有完成执行。我怀疑它试图压缩2个无限循环,并尝试在model.fit_generator
中进行懒惰但同样的问题。
我能做些什么不同的事情?
答案 0 :(得分:0)
问题在于zip
在设计为无限产生输出时试图耗尽两个发生器。这就是这种行为背后的原因。为了克服这个问题,请使用itertools.izip
函数。此外 - 请注意,如果您没有为两个生成器设置相同的seed
,则会对您的x
和y
图片应用不同的扩充。您需要关闭随机扩充或设置相同的seed
。