如何在Tensorflow中并行加载/预处理批处理数据和训练?

如何在Tensorflow中并行加载/预处理批处理数据和训练?,tensorflow,Tensorflow,我想知道在Tensorflow中训练当前批次时,我们是否可以加载和预加载下一批数据 我的模型需要加载来自不同来源的多个图像,并对每个训练操作进行一些预处理,而整个过程相当缓慢。我的计算机加载/处理一批训练数据需要1.4秒,在GPU上训练需要1.6秒。我在想,是否有一种方法可以让我在培训期间加载下一批数据,从而大大加快培训过程 顺便说一句,我已经多线程我的预处理功能 在培训阶段,我的代码的简化版本粘贴在下面: with tf.Session as sess: ...... ....

我想知道在Tensorflow中训练当前批次时,我们是否可以加载和预加载下一批数据

我的模型需要加载来自不同来源的多个图像,并对每个训练操作进行一些预处理,而整个过程相当缓慢。我的计算机加载/处理一批训练数据需要1.4秒,在GPU上训练需要1.6秒。我在想,是否有一种方法可以让我在培训期间加载下一批数据,从而大大加快培训过程

顺便说一句,我已经多线程我的预处理功能

在培训阶段,我的代码的简化版本粘贴在下面:

with tf.Session as sess:
    ......
    ......
    while step < max_global_step:
        ......
        ......
        #This line takes 1.4 seconds to execute
        images_batch = load_batch_data(*batch_image_paths)
        feed = {train_batch, images_batch}
        #This line takes bout 1.6 seconds to run
        loss, summary, step= sess.run([loss, summary, global_step], feed_dict=feed)
        ......
        ......
    ......
    ......
将tf.会话作为SES的
:
......
......
当步长<最大全局步长时:
......
......
#此行需要1.4秒才能执行
图像\u批处理=加载\u批处理\u数据(*批处理\u图像\u路径)
feed={train\u batch,images\u batch}
#这条线路运行大约需要1.6秒
丢失、摘要、步骤=sess.run([丢失、摘要、全局步骤],提要内容=提要)
......
......
......
......
因此,通常程序将花费1.4秒运行
images\u batch=load\u batch\u data(*batch\u image\u path)
,花费1.6秒运行
loss,summary,step=sess.run([loss,summary,global\u step],feed\u dict=feed)

直觉告诉我,应该有一些方法为我读取数据并将其放入缓冲区0中的每一步创建一个类似于双缓冲区的机制,并使用缓冲区1中的数据馈送到网络中,然后切换缓冲区,但如何实现呢


或者,在像我这样的情况下,有没有办法提高总的培训成本?

首先,您的代码无法执行。也许安能帮助人们更好地理解你的问题

要回答您的问题,有两种可能性:

  • 程序在CPU中启动。那么问题就很简单了。我注意到您可能正在使用
    feed\u dict
    加载数据。还有两种加载数据的方法,请参阅。您可以尝试使用
    tf.train.QueueRunner
    QueueRunner
    的一些包装函数来预取数据,它可能会很好地解决您的问题。查看链接,您可以找到所有内容。但至少对我来说,要理解这一机制还需要一些努力

  • 如果程序是在GPU中启动的。那么您遇到的问题可能与CPU和GPU之间的通信有关,请参阅Tensorflow和an的建议以解释原因。但我认为您的情况中的问题可以通过
    QueueRunner
    解决


  • 是的,我想你已经解决了我的问题,我应该切换到
    QueueRunner
    而不是feed。