为什么在使用zip()时python冻结?

时间:2019-05-14 21:21:32

标签: python-3.x python-2.7 tensorflow keras generator

我正在使用带有tensorflow后端的Keras。我需要从目录中提取一堆图像,包括输入和输出,并使用它们来拟合模型。我正在使用Keras库中的ImageDataGenerator.flow_from_directory()函数来创建两个生成器,一个生成器提取输入文件,另一个生成器提取输出文件。

Keras model.fit_generator()函数仅使用一个生成器,因此我使用zip(generator_1,generator_2)将其合并为一个生成器。但是,这导致我的程序死机,甚至无法完成。

def fit_model(self, batch_size, epochs, initial_epoch, callbacks):
    short_generator = self.train_datagen.flow_from_directory('../screenshots/short', class_mode=None, target_size=(self.x_res,self.y_res))
    long_generator = self.train_datagen.flow_from_directory('../screenshots/long', class_mode=None, target_size=(self.x_res,self.y_res))
    print('zipping generators')
    generator = zip(short_generator, long_generator)
    print('done zipping generators')
    self.model.fit_generator(generator, steps_per_epoch=math.ceil(1190/self.batch_size), epochs=10)
    self.model.save('./weights/finished.h5')

这将导致打印“ zipping generators”,但不会打印“ done zipping generators”

2 个答案:

答案 0 :(得分:1)

我解决了这个问题,并想向其他人解释:

我不知道是否总是如此,但是对我来说,因为zip()在Python 2.7中运行,所以它冻结了。在Python 3.x中,它实际上可以在一两秒钟内运行。我没有卸载Python 2,但通过执行以下操作下载了我需要的Python 3表单中的所有依赖项:

python3 -m pip install tensorflow-gpu, keras, numpy, etc...

然后我通过以下方式调用了脚本

python3 myscript.py

代替

python myscript.py

效果很好。

答案 1 :(得分:1)

您可以通过将zip替换为itertools.izip而无需切换到3.X来解决问题。

zip在Python 2.X中渴望并返回一个列表,而itertools.izip(在Python 3.X`中变为zip)产生了一个惰性序列。