为 LSTMS (python) 制作时间步长时出现内存错误

Memory Error when making time-steps for LSTMS (python)

这是我用来形成我的 lstm 输入的函数

它需要两个输入 rucio_data(一个二维 numpy 数组)和持续时间(一个一维 numpy 数组)。 rucio_data 数组的大小约为 (2000000, 9)。

def prepare_model_inputs(rucio_data,durations, num_timesteps=50):                                                                                                                                                                                                     

print(rucio_data.shape[0], durations.shape)                                                                                    
n_examples = rucio_data.shape[0]                                                                                               
n_batches = (n_examples - num_timesteps +1)                                                                                    
print('Total Data points for training/testing : {} of {} timesteps each.'.format(n_batches, num_timesteps))                    

inputs=[]                                                                                                                      
outputs=[]                                                                                                                     
for i in range(0,n_batches):                                                                                                   
    v = rucio_data[i:i+num_timesteps]                                                                                          
    w = durations[i+num_timesteps-1]                                                                                           
    inputs.append(v)                                                                                                           
    outputs.append(w)                                                                                                          
print(len(inputs))                                                                                                             
inputs = np.stack(inputs)                                                                                                      
outputs = np.stack(outputs)                                                                                                    
print(inputs.shape, outputs.shape)                                                                                             

return inputs, outputs

问题是我的系统在 inputs=np.stack(inputs) 步骤内存不足。

我需要一种内存效率更高的方法来执行此操作。

与其将所有输入都准备到一个变量中,不如尝试为每次调用生成一批减小的大小。

In [1]: def prepare_model_inputs(rucio_data,durations, batch_size=150, num_timesteps=50):
   ...:     n = rucio_data.shape[0]
   ...:     while True:
   ...:         inputs, outputs =[], []
   ...:         for i in range(0, n, batch_size):
   ...:             inputs = rucio_data[i:i+batch_size] #batch_size is 3xnum_timesteps
   ...:             outputs = durations[i+num_timesteps-1]
   ...:             # split your inputs, and outputs as you wish
   ...:                             
   ...:             yield inputs, outputs

现在在您的训练脚本中,您可以调用此生成器将数据提供给您的模型。在 keras 中,这会给出如下内容:

>> generator = prepare_model_inputs(rucio_data,durations)
>> model.fit_generator(generator,...)