我对tensorflow中非常慢的批量加载有问题。 训练中的每一步都相当快,但我加载数据的功能非常慢。
我想知道是否有任何方法可以加快速度,或者在列车运行过程中在后台运行它,以便在完成一步之后批处理就可以了。
我的功能存储在numpy数组中。
任何想法? 这是我的代码。
def test_loadbatch(no_timesteps,list_of_file_paths,batch_size):
nof=no_timesteps# No of combined
files=list_of_file_paths
files=shuffle_list(files)
classes=get_class_number(files)
temp_batch=np.zeros(shape=(batch_size,no_timesteps,4096),dtype=np.float32)
temp_classes=np.zeros(shape=(batch_size,101),dtype=np.float32)
bat_num=0
fileno=0
while bat_num != batch_size :
if os.path.isfile(str(files[fileno])):
val=np.load(str(files[fileno]))
try:
if val.shape[0]>no_timesteps+2:
num=random.randint(0,val.shape[0]-(no_timesteps+2))
temp_batch[bat_num,:,:]=val[num:num+nof,:]
temp_classes[bat_num,:]=create_one_hot(classes[fileno])
bat_num=bat_num+1
except Exception as ex:
fileno=fileno+1
fileno=fileno+1
return np.maximum(np.tanh(temp_batch), 0),temp_classes #normalize in range 0->1
答案 0 :(得分:3)
使用准备好的数据输入数据准备和训练模型可以使用queues在TensorFlow中解耦。您可以使用tf.FIFOQueue
或tf.RandomShuffleQueue
创建一个队列,并使用tf.enqueue
将迷你批次排入其中。图表的培训部分将通过运行tf.dequeue
获得小批量。请注意,您应该在不同的Python线程中运行数据准备和培训以获得并发性。有关更多说明和示例,请查看有关线程和队列的how to。另请注意,数据准备+培训管道的吞吐量将受到最慢阶段的限制。在您的情况下,如果每个小批量的数据准备比训练步骤慢,您可能必须运行多个线程来并行创建许多小批量以跟上培训线程。