我训练了一个RNN网络,第一个时期用了7.5个小时。但随着训练过程的进行,张量流越来越慢,第二个时期使用了55个小时。我检查了代码,大多数随时间变慢的API是:
session.run([var1, var1, ...], feed_dict=feed)
,tensor.eval(feed_dict=feed)
。 例如,一个行代码是session.run[var1, var2, ...], feed_dict=feed)
,因为程序开始,它使用0.1秒,但随着进程运行,这行代码所用的时间变得越来越大,10小时后,时间这条线花费了10秒钟。
我已经好几次降临了。这引发了什么?我怎么能避免这个?
如果这行代码:self.shapes = [numpy.zeros(g[1].get_shape(), numy.float32) for g in self.compute_gradients]
将节点添加到张量流图中?我怀疑这可能是原因。这行代码会定期多次调用,self
不是tf.train.optimizer
的对象。
答案 0 :(得分:5)
创建图表后尝试完成图表(graph.finalize())。这将阻止将操作添加到图表中。我也认为self.compute_gradients正在向图表添加操作。尝试在循环外定义操作并在循环中运行
答案 1 :(得分:2)
我有类似的问题。我的解决方案是
tf.reset_default_graph()
每个纪元或样本后。这会重置图表,并释放以关闭会话的方式使用的所有资源。