在运行tensorflow训练rnn时,有多个文件夹,每个文件夹下的文件训练成一个模型,这样将会形成多个模型。但在运行了一晚上之后发现内存很高,CPU利用率很低,感觉是内存溢出。
首先想到的是python垃圾回收问题,但调用了gc.collect()之后任然有问题;
后来感觉是session没关闭,但使用的是with session,不会出现这个问题;
之后网上说是应为循环中创建了计算节点问题,我的迭代中没有创建计算节点,但我在生成多个模型时不得不创建多个节点,但这多个节点讲道理在每次运行完一个文件夹之后会关闭,所以要么是我在每次运行完一个文件夹之后生成的模型在计算并生成下一个文件夹中的数据的模型的时候任然保留,要么是其他问题;如果是每次生成一个模型之后第二次生成另一个模型时第一个模型还在那么我每次生成的模型的大小会成等差数列增长。
打开多个模型文件一看大小,果然递增。
这个问题要么是session没关,即多次运行使用同一个session,要么是graph没关,由于session使用了with,所以将问题定位到graph
于是(解决方法):
在train过程中每次定义计算节点之前加上
with tf.Graph().as_default():
即:
//训练函数
def train(self, df_train):
with tf.Graph().as_default():
//定义各种计算,比如加法等
train_optration=……//定义训练节点
with tf.Session() as sess:
for i in range(self.iteration_num):
sess.run(train_optration)
//预测函数
def predict(self, df_test):
with tf.Graph().as_default():
//定义各种计算,比如加法等
predict_optration=……//定义预测节点
with tf.Session() as sess:
sess.run(predict_optration)