为 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,...)
这是我用来形成我的 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,...)