问题描述
我在训练 keras 模型时遇到了用尽所有内存的问题。我的 x_train 和 y_train 的形状分别大约是 (350000,360,40) 和 (350000,10),它们大约占用了 50 GB 的变量内存。在不使用批处理生成器的情况下,我在训练的前几批中超出了我的内存。我使用了一个类似于这里的批处理生成器:
Use a generator for Keras model.fit_generator
def generator(x_data,y_data,batch_size):
samples_per_epoch = x_data.shape[0]
number_of_batches = math.ceil(samples_per_epoch/batch_size)
counter=0
while 1:
X_batch = np.array(x_data[batch_size*counter:batch_size*(counter+1)]).astype('float32')
y_batch = np.array(y_data[batch_size*counter:batch_size*(counter+1)]).astype('float32')
counter += 1
if (counter-1)*batch_size > x_data.shape[0]:
counter=0
yield X_batch,y_batch
然后使用以下内容对其进行训练:
batch_size=128*4
history=model.fit(generator(x_train,y_train,batch_size),epochs=3,steps_per_epoch = math.ceil(x_train.shape[0]/batch_size),validation_data = generator(x_val,y_val,validation_steps = math.ceil(x_val.shape[0]/batch_size),verbose=1)
但是内存分配在逐步处理数据时慢慢变大,然后在下一个时期跳得更多并且不会回落。这足以让我在几个 epoch 后运行我们的内存。有没有另一种方法可以在保持内存不增加的同时生成批次?或者有没有更好的方法来进行培训?该模型需要一段时间来训练每个时期(大约 25 分钟),因此我尝试使用任何可以缩短处理时间的方法(并尽量不购买更多内存)。
我使用的是 TF 版本 2.4.0、keras 2.3.0、python 3,并使用我的 cpu 进行训练(它有 64 GB 的内存)。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)