我正在尝试训练一个模型,我认为该模型与其他数据集相比花费的时间太长,因为完成一个历时大约需要1小时20分钟。我认为问题是因为数据集没有存储在ram上,但我不确定。
代码如下:
def load_data():
train_datagen = ImageDataGenerator(rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True)
train_generator = train_datagen.flow_from_directory(path1, target_size=(200, 200), batch_size=32, class_mode="binary")
test_datagen = ImageDataGenerator(rescale=1./255)
test_generator = test_datagen.flow_from_directory(path2, target_size=(200, 200),batch_size=32, class_mode="binary")
return train_generator, test_generator
型号:
适合:
model.fit_generator(x, steps_per_epoch=500, epochs=50, validation_data=y, validation_steps=len(y)/32, callbacks=[tensorboard])
如果您能帮助我,我将不胜感激。非常感谢你!
编辑: 我已经完成了Matias Valdenegro的建议,尽管确实可以缩短一个纪元所需的时间,但我意识到这需要我的GPU 10s完成一个步骤。这是我真正想要改进的地方。抱歉造成混乱。
答案 0 :(得分:0)
您的steps_per_epoch
是完全错误的,您应该将此参数设置为训练图像的数量除以批次大小。
此参数的作用是告诉keras要从生成器中提取多少个批次,以声明一个纪元。如果您将其设置得太高(如您所做的那样),那么keras会拉动多个数据段,然后再向您显示一个数据段,这解释了您看到的性能问题。
您不能任意设置此参数。