我正在运行一个遗传超参数搜索算法,它很快就会使所有可用内存饱和。
经过几次测试,看起来 keras 所需的内存量在不同时期和训练不同模型时都会增加。随着 minibatch 大小的增加,问题变得更糟,1~5 的 minibatch 大小至少让我有足够的时间看到内存使用量在前几次拟合中非常快速地上升,然后随着时间的推移缓慢但稳定地增加。
我已经检查了keras 预测内存交换无限期增加,Keras:在进行超参数网格搜索时内存不足,以及Keras(TensorFlow,CPU):循环中的训练序列模型会占用内存,所以我已经在清除 keras 会话并在之后重置 tensorflow 的图形每次迭代。
我还尝试明确删除模型和历史对象并运行 gc.collect() 但无济于事。
我在 CPU 上运行 Keras 2.2.4、tensorflow 1.12.0、Python 3.7.0。我为每个基因运行的代码和我用来测量内存使用的回调:
import tensorflow as tf
import keras as K
class MemoryCallback(K.callbacks.Callback):
def on_epoch_end(self, epoch, log={}):
print(resource.getrusage(resource.RUSAGE_SELF).ru_maxrss)
def Rateme(self,loss,classnum,patience,epochs,DWIshape,Mapshape,lr,TRAINDATA,TESTDATA,TrueTrain, TrueTest,ModelBuilder,maxthreads):
K.backend.set_session(K.backend.tf.Session(config=K.backend.tf.ConfigProto(intra_op_parallelism_threads=maxthreads, inter_op_parallelism_threads=maxthreads)))
#Early Stopping
STOP=K.callbacks.EarlyStopping(monitor='val_acc', min_delta=0.001,
patience=patience, verbose=0, mode='max')
#Build model
Model=ModelBuilder(DWIshape, Mapshape, dropout=self.Dropout,
regularization=self.Regularization,
activ='relu', DWIconv=self.nDWI, DWIsize=self.sDWI,
classes=classnum, layers=self.nCNN,
filtersize=self.sCNN,
FClayers=self.FCL, last=self.Last)
#Compile
Model.compile(optimizer=K.optimizers.Adam(lr,decay=self.Decay), loss=loss, metrics=['accuracy'])
#Fit
his=Model.fit(x=TRAINDATA,y=TrueTrain,epochs=epochs,batch_size=5, shuffle=True, validation_data=(TESTDATA,TrueTest), …Run Code Online (Sandbox Code Playgroud)