我正在使用带有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”
答案 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
)产生了一个惰性序列。