我正在努力加快我的前馈网络的培训(层大小: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与底层张量流引擎之间的交互?
答案 0 :(得分:0)
20-80-40-20-2
不是一组特别大的矩阵乘法来使GPU饱和。此外,由于您在每个培训步骤中从numpy
(或列表)提供数据,因此从Python到C ++和CPU到GPU的副本都是关键路径的一部分。既然你提到你的训练数据只有几个MB
,你可以考虑将整个训练数据作为tf.constant
放在GPU内存中,在GPU上进行切片,然后只传递{{每个培训步骤1}}和i
。