私はRNNネットワークを訓練します、最初のエポックは7.5時間使用されました。しかし、トレーニングプロセスが実行されると、テンソルフローが遅くなり、遅くなり、2番目のエポックは55時間使用されました。私は、コードをチェックし、時間とともに遅くなり、ほとんどのAPIはこれらです:トレーニングの過程でテンソルフローが遅く、遅くなることがあるのはなぜですか?
session.run([var1, var1, ...], feed_dict=feed)
、tensor.eval(feed_dict=feed)
。例えば
は、一行のコードは、プログラムが開始されると、これは0.1秒を使用し、そのプロセスが実行して、時間は10時間、時間この後、コード行がどんどん大きくなるために使用される、session.run[var1, var2, ...], feed_dict=feed)
あります10秒になる。
私はこれを数回吹きました。これはどのようなトリガーですか?これを避けるにはどうすればいいですか?
このコード行の場合:self.shapes = [numpy.zeros(g[1].get_shape(), numy.float32) for g in self.compute_gradients]
は、テンソルフローのグラフにノードを追加しますか?私はこれが理由かもしれないと思う。このコード行は定期的に何回も呼び出され、self
はtf.train.optimizer
のオブジェクトではありません。
メモリリークの可能性があります。 [ここ]の指示に従ってみてください(http://stackoverflow.com/documentation/tensorflow/3883/how-to-debug-a-memory-leak-in-tensorflow/13426/use-graph-finalize-to-catch-ノード追加中のグラフ#t = 20160822041413026848)を使用して原因を追跡します。 'self'が' tf.train.Optimizer'オブジェクトである場合、 '[self.compute_gradientsのgのnumpy.zeros(...)'行はグラフにノードを追加するかもしれません。 – mrry