Pytorch “Trying to backward through the graph a second time, but the buffers have already been freed. Specify retain_graph=True when calling backward the first time.”

 

エラーメッセージ


対策


解説

x=layer[i](x) のように計算処理を進めていってLOSS計算したあとにbackword()を実行するとxの算出結果がクリアされてしまう。

これは悪意があるわけではなくメモリ節約するための仕様。

しかし、Multi Task Learning のときによく発生するのだが、後半部分でLayerが分岐してOutputが2つ以上になったとき、1つ目のタスクでLOSS算出してbackword()、そして2つ目のタスクでLOSS算出してbackword()しようとするとxの算出結果がクリアされているのでエラーとなる。

対策は「まだ学習に用いるので計算結果をクリアしないでね」という目印としてloss.backword(retain_graph=True)とすること。

 

by ロードローラー

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください