質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2611閲覧

Pytorchのbackward()のくせ❓ それとも深層学習の要❓

insecticide

総合スコア315

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/06/21 06:01

編集2022/06/22 06:35

PytorchでNNを構築する話ですけれども、
modelX は model1とmodel2という二つのサブmodel(NNブロック)を接続して構成されています。
model1はNNの入力層に繋がって、model2はNNの出力層に繋がっています。
訓練ロジック以下の通りで、トラブルが発生しました。

Python

1model1.zero_grad() 2batch_loss_model1.backward(retain_graph=True) 3optimizer_model1.step() # ① 4modelX.zero_grad() 5batch_loss_model2.backward() # ② 👈①をやめない限り、エラー発生(メッセージ内容は↓)

/usr/local/lib/python3.7/dist-packages/torch/_tensor.py in backward(self, gradient, retain_graph, create_graph, inputs)
361 create_graph=create_graph,
362 inputs=inputs)
--> 363 torch.autograd.backward(self, gradient, retain_graph, create_graph, inputs=inputs)
364
365 def register_hook(self, hook):

/usr/local/lib/python3.7/dist-packages/torch/autograd/init.py in backward(tensors, grad_tensors, retain_graph, create_graph, grad_variables, inputs)
173 Variable.execution_engine.run_backward( # Calls into the C++ engine to run the backward pass
174 tensors, grad_tensors
, retain_graph, create_graph, inputs,
--> 175 allow_unreachable=True, accumulate_grad=True) # Calls into the C++ engine to run the backward pass
176
177 def grad(

RuntimeError:** one of the variables needed for gradient computation has been modified by an inplace operation:**
[torch.FloatTensor [200, 6]], which is output 0 of AsStridedBackward0, is at version 2; expected version 1 instead.
Hint: enable anomaly detection to find the operation that failed to compute its gradient, with torch.autograd.set_detect_anomaly(True).


自分の水準では理解も解決もできないので、何方か原因を教えてくださいませんか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

多くのメッセージの中に下記の一句が最も重要で、ネット検索したら、いっぱい出た。
世界中のNNをやってる人が大半遭遇(encounter)した事があるらしい。

RuntimeError:** one of the variables needed for gradient computation has been modified by an inplace operation:**

投稿2022/06/22 06:40

insecticide

総合スコア315

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

insecticide

2022/06/22 06:43

《Hint: enable anomaly detection to find the operation that failed to compute its gradient, with torch.autograd.set_detect_anomaly(True).》 いつも役立たない❣
insecticide

2022/06/22 07:03 編集

誤差関数 《 batch_loss_model2 》 こいつこそ問題❣ 見かけ上はscalar で(次元数=0のTensor)とんでもないやつだが、実に凄い奴だ 💛💛 👹👹 こいつには所謂『計算Graph』を持っているのだ 👹👹 最後の計算以降、『計算Graph』上の微分需要の変数がinplace 的に操作されたら、即ち、値の変更の可能性があったら、こいつに対する最後の計算値が信用できなくなるので、再度計算・更新しないうちに、backward()を発行すれば自動微分計算は危うくなるので、エラーメッセージを出してくれた❣ 💛
insecticide

2022/06/22 07:07

即ち、直前のoptimizer_model1.step()の実行は、《 batch_loss_model2 》の値に影響する変数を更新されたので、《 batch_loss_model2 》がoptimizer_model1.step()の実行前の値のままで、batch_loss_model2.backward() を発射するのは、行けないのだ!!!!! なんて賢いTorchだ❓❓❓❓❓❓❓❓❓
insecticide

2022/06/22 07:08

これで問題を自己解決できた ❓
insecticide

2022/06/22 07:11 編集

じゃー、試しに、 batch_loss_model2.backward() を発射する直前、もう一度batch_loss_model2を計算したら、下記のようなメッセージが出なくなる❓❓❓❓❓❓❓ RuntimeError:** one of the variables needed for gradient computation has been modified by an inplace operation:**
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問