当标签本身是图像时,我需要训练一个模型。我想对输入图像和输出图像应用相同的数据增强。根据这个答案,我压缩了两个生成器:
# create augmentation generators for the input images and label images
image_datagen = ImageDataGenerator(rotation_range=45, width_shift_range=0.2, height_shift_range=0.2, brightness_range=(0.5,1.5),
fill_mode="reflect", horizontal_flip=True ,zoom_range=0.3,preprocessing_function = self.apply_kernels)
desity_datagen = ImageDataGenerator(rotation_range=45, width_shift_range=0.2, height_shift_range=0.2, brightness_range=(0.5,1.5),
fill_mode="reflect", horizontal_flip=True ,zoom_range=0.3,preprocessing_function = self.apply_kernels)
image_generator = image_datagen.flow_from_directory(self.train_data_dir, batch_size=batch_size, class_mode=None, seed=seed)
density_generator = desity_datagen.flow_from_directory(self.train_label_dir, batch_size=batch_size, class_mode=None, seed=seed)
# Combine the image and label generator
self.train_generator = zip(image_generator, density_generator)
我在一个生成器calss中构建了它,我使用初始化它
gen = data_generator(path_to_images, path_to_labels, batch_size);
我不包括全班同学,因为我不确定是否需要。如果需要,我会编辑并添加它。我正试图从两个生成器调用下一批,看看它是否有效:
image,label = gen.train_generator.next()
print(labels.shape)
我得到
属性错误:"zip"对象没有属性"next"我理解我为什么得到它,尽管我不知道如何得到一批。
使用list(gen.train_generator)
对内存来说太大。
您应该使用内置函数next-
value = next(gen.train_generator)
如果没有下一个值,next
将抛出StopIteration
异常。确保包装在try-except
中以防止错误冒泡-
try:
value = next(gen.train_generator)
except StopIteration:
value = None
由于这种模式非常常见,next
接受一个次要参数,以便在生成器耗尽时使用-
value = next(gen.train_generator, None) # default to None if generator is exhausted
这将执行您想要的操作:
gen.train_generator.__next__()
尽管@OlvinRoght的评论/回答更简洁。