如何在Tensorflow中并行加载/预处理批处理数据和训练?
我想知道在Tensorflow中训练当前批次时,我们是否可以加载和预加载下一批数据 我的模型需要加载来自不同来源的多个图像,并对每个训练操作进行一些预处理,而整个过程相当缓慢。我的计算机加载/处理一批训练数据需要1.4秒,在GPU上训练需要1.6秒。我在想,是否有一种方法可以让我在培训期间加载下一批数据,从而大大加快培训过程 顺便说一句,我已经多线程我的预处理功能 在培训阶段,我的代码的简化版本粘贴在下面:如何在Tensorflow中并行加载/预处理批处理数据和训练?,tensorflow,Tensorflow,我想知道在Tensorflow中训练当前批次时,我们是否可以加载和预加载下一批数据 我的模型需要加载来自不同来源的多个图像,并对每个训练操作进行一些预处理,而整个过程相当缓慢。我的计算机加载/处理一批训练数据需要1.4秒,在GPU上训练需要1.6秒。我在想,是否有一种方法可以让我在培训期间加载下一批数据,从而大大加快培训过程 顺便说一句,我已经多线程我的预处理功能 在培训阶段,我的代码的简化版本粘贴在下面: with tf.Session as sess: ...... ....
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中的数据馈送到网络中,然后切换缓冲区,但如何实现呢
或者,在像我这样的情况下,有没有办法提高总的培训成本?首先,您的代码无法执行。也许安能帮助人们更好地理解你的问题 要回答您的问题,有两种可能性:
feed\u dict
加载数据。还有两种加载数据的方法,请参阅。您可以尝试使用tf.train.QueueRunner
或QueueRunner
的一些包装函数来预取数据,它可能会很好地解决您的问题。查看链接,您可以找到所有内容。但至少对我来说,要理解这一机制还需要一些努力QueueRunner
解决是的,我想你已经解决了我的问题,我应该切换到
QueueRunner
而不是feed。