我训练了一个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
。
创建图形后,请尝试完成其图形(graph.finalize())。这样可以防止将操作添加到图形中。我也认为self.compute_gradients正在向图形添加操作。尝试在循环外定义操作,然后在循环内运行
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句