エラーメッセージ
1 |
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. |
対策
1 |
loss.backword(retain_graph=True) |
解説
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 ロードローラー