我正在尝试为多个输入实现图像增强,但是我的实现似乎进入无限循环。发布以下代码。我做错了什么?
data_gen_args = dict(
horizontal_flip=True, # randomly flip images
vertical_flip=True) # randomly flip images
datagen = ImageDataGenerator(**data_gen_args)
datagen.fit(X_train,seed=1)
datagen.fit(X1_train,seed=1)
datagen.fit(X2_train,seed=1)
datagen.fit(X3_train,seed=1)
datagen.fit(X4_train,seed=1)
multi1=datagen.flow(X_train, seed=1)
multi2=datagen.flow(X1_train, seed=1)
multi3=datagen.flow(X2_train, seed=1)
multi4=datagen.flow(X3_train, seed=1)
multi5=datagen.flow(X4_train, seed=1)
multigen=zip(multi1,multi2,multi3,multi4,multi5)
model.fit_generator(multigen,y_train,samples_per_epoch=X_train.shape[0],
batch_size=8,
nb_epoch=1,
validation_split=0.2,
shuffle=True,
callbacks=[xyz])
答案 0 :(得分:1)
问题是zip
尝试迭代multi*
的所有输出并将它们作为元组列表返回。但由于multi*
是无限迭代器,zip
只会在multi*
内迭代而永不返回。
这里的解决方案是使用itertools.izip
,它是zip
的迭代器版本。
只需导入itertools
import itertools as it
然后将发电机压缩起来
multigen = it.izip(multi1, multi2, multi3, multi4, multi5)
有关itertools
:https://docs.python.org/2/library/itertools.html