1

我想知道keras中的fit_generator()在使用通常的fit()方法与发生器产量相同的batch_size方面在内存使用方面是否有优势。我见过类似这样的一些例子:keras中fit_generator()的优势

def generator(): 
(X_train, y_train), (X_test, y_test) = mnist.load_data() 
# some data prep 
... 
while 1: 
    for i in range(1875): # 1875 * 32 = 60000 -> # of training samples 
     yield X_train[i*32:(i+1)*32], y_train[i*32:(i+1)*32] 

如果我通过这个入fit_generator()方法或者直接传递所有数据到fit()方法和定义32的batch_size,这将使有关任何区别( GPU?) - 任何内存?

回答

1

是的,当您需要增强数据以获得更好的模型准确性时,实际上会出现差异。

为了提高效率,它允许在CPU上对图像进行实时数据增强。这意味着它可以使用GPU进行模型训练并更新,同时向CPU委托增加图像并提供批量训练。

+0

但在GPU上,内存使用情况仍然相同,是否正确?它总是必须使用fit()和fit_generator()将完整的batch_size加载到GPU内存中? – V1nc3nt

+1

是的,你是正确的。我认为如果你必须引入增强和使用keras ImageDataGenerator作为发生器,它提供了许多功能,如旋转,缩放,剪切等,这将从现有的训练数据创建一个新的图像,而不会是可以预先获得,并且这种额外的处理可以并行处理。看看https://keras.io/preprocessing/image/ ImageDataGenerator –

+0

感谢您的帮助。我希望有一种方法可以让我只将一批的部分内容加载到模型中,以节省GPU内存。但似乎你总是必须至少提供完整批次。例如。如果我的batch_size为10,我希望有一种方法,在backprop完成之前,只提供5个样本,然后另外提供5个样本。也许有一些限制,为什么这不起作用。 – V1nc3nt