Epoch在GPU上花费的时间过长

时间:2018-12-31 15:16:47

标签: python tensorflow keras artificial-intelligence

我正在尝试训练一个模型,我认为该模型与其他数据集相比花费的时间太长,因为完成一个历时大约需要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

型号:

  • 顺序模型
  • 具有32个神经元的2个卷积层,激活= relu。
  • 1个具有64个神经元的卷积层,激活= relu。
  • 平整密集层,激活= relu。
  • 退出0.5
  • 具有S型激活的输出层(密集)。
  • 亚当优化器。
  • 损失:二进制交叉熵。

适合:

model.fit_generator(x, steps_per_epoch=500, epochs=50, validation_data=y, validation_steps=len(y)/32, callbacks=[tensorboard])
  • 我的数据集有1201张图像和2个类别。
  • 我按照this教程构建了模型。
  • 我的GPU是GTX 1060 3gb。
  • 8GB的内存
  • 图像被重塑为200x200。

如果您能帮助我,我将不胜感激。非常感谢你!

编辑: 我已经完成了Matias Valdenegro的建议,尽管确实可以缩短一个纪元所需的时间,但我意识到这需要我的GPU 10s完成一个步骤。这是我真正想要改进的地方。抱歉造成混乱。

1 个答案:

答案 0 :(得分:0)

您的steps_per_epoch是完全错误的,您应该将此参数设置为训练图像的数量除以批次大小。

此参数的作用是告诉keras要从生成器中提取多少个批次,以声明一个纪元。如果您将其设置得太高(如您所做的那样),那么keras会拉动多个数据段,然后再向您显示一个数据段,这解释了您看到的性能问题。

您不能任意设置此参数。