【问题标题】:Epoch's steps taking too long on GPUEpoch 在 GPU 上的步骤太长了
【发布时间】:2019-05-28 01:45:10
【问题描述】:

我正在尝试训练一个模型,鉴于完成一个 epoch 大约需要 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

型号:

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

适合:

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 的建议做了,尽管完成一个 epoch 所需的时间确实较短,但我意识到我的 GPU 需要 10 秒才能完成一个步骤。这是我真正想要改进的地方。很抱歉造成混乱。

【问题讨论】:

  • 如果您认为问题源于 GPU,您可以使用nvprof <your_program> [args...] 获取 CUDA 内核执行时间。
  • 为什么将每 epoch 的步数设置为 500?
  • @MatiasValdenegro 我尝试了 32,但结果很糟糕,在教程中它们设置为 2000 和 50 个 epoch。所以我认为 500 是一个好主意,因为我在“体面”的时间(4 小时)内取得了不错的结果。
  • @Kh40tiK 我认为问题出在 ImageDataGenerator 或 fit_generator 但正如我所说我不确定。

标签: python tensorflow keras artificial-intelligence


【解决方案1】:

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

这个参数的作用是告诉 keras 要从生成器中提取多少批次,以便声明一个 epoch。如果您将其设置得太高(就像您所做的那样),那么 keras 会在向您显示一个 epoch 之前提取多个 epoch 的数据,这解释了您看到的性能问题。

这个参数不能随意设置。

【讨论】:

  • 我会用 32 再试一次,但是为什么他们在教程中使用 2000?
  • @SantiagoPardal 我猜不出他们为什么将其设置为 2000,请问编写该教程的人。可能只是他们的数据集更大。
  • @MatiasValdengro 我编辑了问题,请看一下。时间正常吗?谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-08-18
  • 1970-01-01
  • 2021-08-07
  • 1970-01-01
  • 1970-01-01
  • 2014-12-22
  • 1970-01-01
  • 2019-07-11
相关资源
最近更新 更多