当前位置: 首页 > 知识库问答 >
问题:

Epoch的步骤在GPU上花费了太长时间

拓拔耀
2023-03-14

我正在尝试训练一个模型,在我看来,与其他数据集相比,该模型花费的时间太长,因为完成一个历元需要大约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激活的输出层(致密)
  • Adam optimizer
  • 损失:二进制交叉熵

适合:

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

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

编辑:我已经按照Matias Valdenegro的建议做了,尽管完成一个历元所需的时间确实较短,但我意识到我的GPU需要10秒才能完成一个步骤。这就是我真正想要改进的地方。很抱歉造成混淆。

共有1个答案

轩辕实
2023-03-14

每个历元的步数完全错误,应将此参数设置为训练图像数除以批次大小。

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

您不能任意设置此参数。

 类似资料:
  • 问题内容: SQL: 用户索引: 个人资料索引 解释 : 上面的查询大约需要0.1221 我怎样才能使其运行更快? 问题答案: 我删除了此查询,因此搜索完成后不会显示总结果数。 似乎是临时解决方案,甚至是永久解决方案。

  • 我遵循这个链接制作一个CRF模型。我使用以下命令制作模型。 模型制作成功,但我的训练数据非常多,花费了太多时间。当我仔细观察系统中发生的事情时。它只使用了我电脑的一个核心 我能否以使用计算机多个核心的方式运行此命令?看起来它是作为单个线程实现的。是否支持多线程?如果是,请分享。

  • 我一直在尝试使用neo4jphp为我们的新模块创建节点和关系[https://github.com/jadell/neo4jphp/wiki]. 我使用cypher查询实现同样的功能。 到目前为止,节点创建工作在gr8中。 但是,当我尝试为节点创建独特的关系时,它花费的时间太长。。。。 注意:标签用户有唯一的约束userid,因此带有标签用户的节点由属性userid上的Neo4j索引。 我们还有其

  • 问题内容: 我试图在Java中找到斐波那契数列的总和,但是运行时间太长了(或者应该吗?)。每当我使用40以上的整数时,这都会减慢速度。 注意:在50时,返回的负值使我感到困惑。 有什么建议吗? 问题答案: 对于,您的递归调用会两次调用自身。这些调用中的每一个都可以进一步递归。方法调用的总数缩放为,并且是一个非常大的数字。这种糟糕的缩放比例反映了以下事实:简单的递归方法最终会不必要地多次重新计算相同

  • 任何解决这一问题的建议都将不胜感激。或者我们可以用另一种方式来计数?我想补充一些细节。滑动大小是一个事件和窗口大小超过10小时(每秒大约有300个事件),我们需要对每个事件做出反应。所以在这种情况下,我们没有使用Flink提供的窗口。我们使用来存储前面的信息。在中用于触发旧数据的清理作业。最后dinstinct键的数量非常多。

  • 我将cxf库用于web服务客户端。 当响应延迟了大约5秒时,cxf需要大约20秒来返回响应。ws返回33912长响应。 不过,客户对快速响应没有问题。 我找不到问题所在。我测试了wsendpoint,它在8秒内返回最大值。但cxf客户端有时需要30-50秒。 我打开了调试日志,这两行之间需要9秒 2018-01-11 17:17:14.022调试10492--[nio-8086-exec-6]o.