【发布时间】: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