当使用fit_generator和validation_data训练Keras神经网络时,为什么内存使用会增加?

时间:2018-02-21 16:30:51

标签: neural-network keras

我有32 GB的RAM,并在Windows 7机器上使用Keras顺序神经网络训练大型数据集。由于数据集的大小,我选择使用fit_generator每批约5000个样本,每个样本约有500个特征。我在生成器中有gc.collect()来解决潜在的内存泄漏问题,这有助于此模型的先前迭代。

对于第一个时期的前几个步骤,内存消耗很低。然后在大约15步之后,它开始增加和减少,直到它最终以27.6 GB的速度封顶。

有人可以解释为什么内存使用会随着时间的推移而增加吗此外,第一个时代已有数百个步骤,内存仍为27.6 GB。这有什么意义吗?

NN本身是3层深,每个神经元有50个神经元。我知道存储权重有一些内存要求,但这会随着时间的推移而增加吗?

def gen_data(max,rows,skip):
    import gc
    while True:
        data = pd.read_csv(csv,skiprows=range(1,skip),nrows=rows,index_col=0)
        x,y = features(data)
        yield x,y
        skip += rows
        if max is not None and skip >= max:
            skip = 0
        gc.collect()

model=Sequential()
model.add(Dense(50, input_dim = train_shape, activation='linear'))
model.add(LeakyReLU())
model.add(Dropout(0.2))
model.add(Dense(50, input_dim = train_shape, activation='linear'))
model.add(LeakyReLU())
model.add(Dropout(0.2))
model.add(Dense(50, input_dim = train_shape, activation='linear'))
model.add(LeakyReLU())
model.add(Dropout(0.2))
model.add(Dense(1,activation='sigmoid'))

model.compile(loss='binary_crossentropy', optimizer='adam')

hist = model.fit_generator(gen_data(8000000,5000),epochs=50,
             steps_per_epoch=int(8000000/5000),verbose=1,callbacks=callbacks_list,
       class_weight=class_weight,validation_steps=10,validation_data=gen_data(800000,80000))

- 编辑 -

删除validation_steps和validation_data时,进程不会在内存中爆炸。这似乎是奇怪的行为,因为我不希望验证数据在纪元结束之前使用。有什么想法吗?

0 个答案:

没有答案