【发布时间】:2018-04-19 22:31:23
【问题描述】:
tf.dataset 工作得非常好,我能够将学习速度提高 2 倍。但是我仍然有性能问题,GPU 的利用率很低(尽管使用tf.dataset 和几个工人)。
我的用例如下:
- ~400 个训练样例,每个有 10 个输入通道(约 5GB)
任务是使用 ResNet50 进行分割。前后大约需要 0.15 秒。批量大小 = 32
数据加载速度很快,大约需要 0.06 秒。
但是在一个 epoch(400/32 ~= 13 次迭代)之后,数据加载大约需要 3.5 秒,就像加载器的初始化一样(它不仅仅是处理所有 epoch)。这使得学习非常缓慢。
我的问题是:是否有在每个 epoch 之后消除初始化的选项,只是不断地输入数据?
我试图设置dataset.repeat(10),但它没有帮助。
加载代码和火车在这里:https://gist.github.com/melgor/0e681a4fe8f125d25573aa30d8ace5f3
该模型只是将 ResNet 转换为 Ecnoder-Decoder 思想进行图像分割。大部分代码取自https://github.com/argman/EAST,但由于这里加载很慢,我想将其转换为TfRecords。
【问题讨论】:
-
不看源头很难回答这样的问题。我最近一直在玩数据集,似乎 dataset.repeat() 是要走的路,而不是每次都重新初始化迭代器。但是你必须小心你在管道中的哪个位置执行repeat()。
-
感谢您的回答。如果它对调试有用,我添加了一些代码。目前我不确定是否有任何方法可以解决此问题。
-
-
感谢您的提示。不幸的是,它并没有更好地工作。目前我正在尝试压缩数据,也许然后重新初始化会更好。
标签: tensorflow dataset