多输入的图像增强给出无限循环?

时间:2017-03-09 01:32:06

标签: python-2.7 keras

我正在尝试为多个输入实现图像增强,但是我的实现似乎进入无限循环。发布以下代码。我做错了什么?

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])

1 个答案:

答案 0 :(得分:1)

问题是zip尝试迭代multi*的所有输出并将它们作为元组列表返回。但由于multi*是无限迭代器,zip只会在multi*内迭代而永不返回。

这里的解决方案是使用itertools.izip,它是zip的迭代器版本。

只需导入itertools

import itertools as it

然后将发电机压缩起来

multigen = it.izip(multi1, multi2, multi3, multi4, multi5)

有关itertoolshttps://docs.python.org/2/library/itertools.html

的详细信息