【发布时间】:2017-04-11 23:35:52
【问题描述】:
我正在尝试加快前馈网络的训练速度(层大小:20-80-40-20-2。)我的数据集有大约 100 000 个数据点。我正在使用以下代码来训练模型:
for ep in range(epochs):
for i in range(0, N, mini_batch_sz):
j = i + mini_batch_sz
sess.run(train_op, feed_dict={vX:X[i:j], vY:Y[i:j]})
其中 epochs 和 mini_batch_sz 分别为 10000 和 25。这个循环只会在每个 python 循环中执行一个小批量步骤。我在训练期间的 GPU 负载仅为 15%。我想知道是否可以将多个小批量训练数据传递给tensorflow,以减少python与底层tensorflow引擎的交互?
【问题讨论】:
-
瓶颈通常不是python和底层tensorflow引擎的交互。这里有几件事你可以尝试加速代码:tensorflow.org/performance/performance_guide
-
谢谢,我知道提到的页面并尝试了其中的一些,不幸的是,没有任何帮助。我注意到的另一件事是,我的训练作业在 CPU(有 6 个内核)上运行的速度比在具有超过 2K cuda 单元的 GPU 上运行得快得多(快 2 倍)。此外,我的训练数据集只有几 MB 大小,所有内容都已加载并预处理到主内存中。
-
在您发布的内容中,除非您的数据
X和Y在列表中而不是 numpy 数组中,否则我并没有发现任何问题。所以我建议你添加一个计时器并打印出你在sess.run的通话中花费了多长时间以及在sess.run之外花费了多长时间。如果你不是(我怀疑你不是),你应该在sess.run之外花费微不足道的时间,找出原因,GPU 将一直处于空闲状态。
标签: session optimization tensorflow neural-network