使用tf.Data在训练(获得100%GPU利用率)的同时预取NumPy阵列的下一个小批量

时间:2018-04-08 16:34:30

标签: tensorflow tensorflow-datasets mini-batch

我有一个巨大的NumPy矩阵已加载到内存中。我想在当时使用20,000行来适应(执行梯度下降),但在这样做时,接下来的20,000行将被复制到GPU内存中,因此GPU始终会提供数据,达到100%的GPU利用率。 / p>

我尝试使用新的tf.Data API执行此操作。我编写了下面的代码,但利用率几乎达不到50%。我不完全确定这是由于我的错误,还是Tensorflow中的错误。

x = tf.placeholder(shape=[None,xSize], dtype=typ)
y = tf.placeholder(shape=[None,ySize], dtype=typ)

# xT and yT are huge NumPy arrays
def trainOneEpoch(xT, yT):
    batchSize = 20000
    dataset = tf.data.Dataset.from_tensor_slices((x, y))
    dataset = dataset.batch(batchSize).prefetch(2)
    iterator = dataset.make_initializable_iterator()
    sess.run(iterator.initializer, {x: xT, y: yT})

    while True:
        try:
            xS, yS = sess.run(iterator.get_next())
            sess.run(trainer, {x: xS, y: yS})
        except tf.errors.OutOfRangeError:
            break

如何使这项工作(有或没有tf.Data)?

0 个答案:

没有答案