微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

keras 模型的批处理生成器

如何解决keras 模型的批处理生成器

我在训练 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 举报,一经查实,本站将立刻删除。