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

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

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

強化学習とは、ある環境下のエージェントが現状を推測し行動を決定することで報酬を獲得するという見解から、その報酬を最大限に得る方策を学ぶ機械学習のことを指します。問題解決時に得る報酬が選択結果によって変化することで、より良い行動を選択しようと学習する点が特徴です。

PyTorch

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

Python 3.x

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Q&A

0回答

1526閲覧

RuntimeErrorが出て楽観的初期化を実装できない

BraveDragon

総合スコア15

強化学習

強化学習とは、ある環境下のエージェントが現状を推測し行動を決定することで報酬を獲得するという見解から、その報酬を最大限に得る方策を学ぶ機械学習のことを指します。問題解決時に得る報酬が選択結果によって変化することで、より良い行動を選択しようと学習する点が特徴です。

PyTorch

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

Python 3.x

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

0グッド

0クリップ

投稿2020/06/22 10:49

編集2021/02/28 07:04

前提・実現したいこと

PyTorchを利用して強化学習のAIを作成しています。楽観的初期化を実装しようとしているのですが、
そうしようとすると

Warning: Error detected in MmBackward. Traceback of forward call that caused the error: File "C:\Users(ユーザー名)\Documents\MyFolder\CardBattle2\CardBattle\Agent_DQN.py", line 102, in <module> out = Model_Target(torch.ones(DQNModel.Inputs,device=Devise)) File "C:\Users(ユーザー名)\AppData\Local\Programs\Python\Python37\lib\site-packages\torch\nn\modules\module.py", line 550, in __call__ result = self.forward(*input, **kwargs) File "C:\Users(ユーザー名)\AppData\Local\Programs\Python\Python37\lib\site-packages\torch\nn\modules\container.py", line 100, in forward input = module(input) File "C:\Users(ユーザー名)\AppData\Local\Programs\Python\Python37\lib\site-packages\torch\nn\modules\module.py", line 550, in __call__ result = self.forward(*input, **kwargs) File "C:\Users(ユーザー名)\AppData\Local\Programs\Python\Python37\lib\site-packages\torch\nn\modules\linear.py", line 87, in forward return F.linear(input, self.weight, self.bias) File "C:\Users(ユーザー名)\AppData\Local\Programs\Python\Python37\lib\site-packages\torch\nn\functional.py", line 1612, in linear output = input.matmul(weight.t()) (print_stack at ..\torch\csrc\autograd\python_anomaly_mode.cpp:60) Traceback (most recent call last): File "C:\Users(ユーザー名)\Documents\MyFolder\CardBattle2\CardBattle\Agent_DQN.py", line 249, in <module> loss.backward(retain_graph=Need_Retain) File "C:\Users(ユーザー名)\AppData\Local\Programs\Python\Python37\lib\site-packages\torch\tensor.py", line 198, in backward torch.autograd.backward(self, gradient, retain_graph, create_graph) File "C:\Users(ユーザー名)\AppData\Local\Programs\Python\Python37\lib\site-packages\torch\autograd\__init__.py", line 100, in backward allow_unreachable=True) # allow_unreachable flag RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation: [torch.cuda.FloatTensor [64, 5]], which is output 0 of TBackward, is at version 21; expected version 19 instead. Hint: the backtrace further above shows the operation that failed to compute its gradient. The variable in question was changed in there or anywhere later. Good luck!

というエラーが発生しました。
どうすれば解決できるでしょうか?
よろしくお願いします。

該当のソースコード

問題になっている箇所を抜き出しています。
Agent_DQN.py

Python

1import torch 2import torch.optim as optim 3import DQNModel 4 5#問題の箇所を確認するための設定 6torch.autograd.set_detect_anomaly(True) 7 8#更新対象となるネットワーク 9Devise = "cuda" if torch.cuda.is_available() else "cpu" 10Model = DQNModel.Model.to(Devise) 11 12#更新を計算するためのモデル 13Model_Target = DQNModel.Model.to(Devise) 14optimizer = optim.Adam(DQNModel.Model.parameters(),lr=0.001,weight_decay=0.005) 15 16Model.train(True) 17Model_Target.train(True) 18#楽観的初期化の回数 19StartInitializeTimes = 10 20Need_Retain_First = True 21 22for i in range(StartInitializeTimes): 23 target = torch.ones(DQNModel.Outputs,dtype=torch.float32,device=Devise) 24 out = Model_Target(torch.ones(DQNModel.Inputs,device=Devise)) 25 loss = criterion(out,target) 26 optimizer.zero_grad() 27 loss.backward(retain_graph=Need_Retain_First) 28 Need_Retain_First = False 29 optimizer.step()

DQNModel.py

Python

1#coding: "utf-8" 2import torch.nn as nn 3import torch.nn.functional as F 4 5Inputs = 1664 6Outputs = 5 7#学習に使用するモデル 8Model = nn.Sequential( 9 nn.Linear(in_features=Inputs,out_features=64), 10 nn.LeakyReLU(), 11 nn.Linear(in_features=64,out_features=64), 12 nn.LeakyReLU(), 13 nn.Linear(in_features=64,out_features=Outputs) 14 )

発生している問題・エラーメッセージ

  • Pytorchを利用して強化学習のAIを作成したい。
  • そのために、楽観的初期化を実装したい。そのために、以下のソースコードを書いた。

Python

1#楽観的初期化の回数 2StartInitializeTimes = 10 3Need_Retain_First = True 4 5for i in range(StartInitializeTimes): 6 target = torch.ones(DQNModel.Outputs,dtype=torch.float32,device=Devise) 7 out = Model_Target(torch.ones(DQNModel.Inputs,device=Devise)) 8 loss = criterion(out,target) 9 optimizer.zero_grad() 10 loss.backward(retain_graph=Need_Retain_First) 11 Need_Retain_First = False 12 optimizer.step()
  • しかし、以下のようなエラーが出ていて、実装できない。エラーを解決し、楽観的初期化を実装できるようにしたい。
Warning: Error detected in MmBackward. Traceback of forward call that caused the error: File "C:\Users(ユーザー名)\Documents\MyFolder\CardBattle2\CardBattle\Agent_DQN.py", line 102, in <module> out = Model_Target(torch.ones(DQNModel.Inputs,device=Devise)) File "C:\Users(ユーザー名)\AppData\Local\Programs\Python\Python37\lib\site-packages\torch\nn\modules\module.py", line 550, in __call__ result = self.forward(*input, **kwargs) File "C:\Users(ユーザー名)\AppData\Local\Programs\Python\Python37\lib\site-packages\torch\nn\modules\container.py", line 100, in forward input = module(input) File "C:\Users(ユーザー名)\AppData\Local\Programs\Python\Python37\lib\site-packages\torch\nn\modules\module.py", line 550, in __call__ result = self.forward(*input, **kwargs) File "C:\Users(ユーザー名)\AppData\Local\Programs\Python\Python37\lib\site-packages\torch\nn\modules\linear.py", line 87, in forward return F.linear(input, self.weight, self.bias) File "C:\Users(ユーザー名)\AppData\Local\Programs\Python\Python37\lib\site-packages\torch\nn\functional.py", line 1612, in linear output = input.matmul(weight.t()) (print_stack at ..\torch\csrc\autograd\python_anomaly_mode.cpp:60) Traceback (most recent call last): File "C:\Users(ユーザー名)\Documents\MyFolder\CardBattle2\CardBattle\Agent_DQN.py", line 249, in <module> loss.backward(retain_graph=Need_Retain) File "C:\Users(ユーザー名)\AppData\Local\Programs\Python\Python37\lib\site-packages\torch\tensor.py", line 198, in backward torch.autograd.backward(self, gradient, retain_graph, create_graph) File "C:\Users(ユーザー名)\AppData\Local\Programs\Python\Python37\lib\site-packages\torch\autograd\__init__.py", line 100, in backward allow_unreachable=True) # allow_unreachable flag RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation: [torch.cuda.FloatTensor [64, 5]], which is output 0 of TBackward, is at version 21; expected version 19 instead. Hint: the backtrace further above shows the operation that failed to compute its gradient. The variable in question was changed in there or anywhere later. Good luck!

試したこと

以下のサイトを参考に、Agent_DQN.pyのoutに対してout = out.clone()してからcriterion()の引数に入れるようにしたり、DQNModel.pyのnn.LeakyReLU()の引数にinplace=Trueを指定してみましたが、同様のエラーが発生しました。

RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation: [torch.cuda.FloatTensor [4, 512, 16, 16]], which is output 0 of ConstantPadNdBackward, is at version 1; expected version 0 instead. Hint: enable anomaly detection to find the operation that failed to compute its gradient, with torch.autograd.set_detect_anomaly(True). · Issue #23 · NVlabs/FUNIT
URL : https://github.com/NVlabs/FUNIT/issues/23

補足情報(FW/ツールのバージョンなど)

使用しているPC:Windows 10 Home
Pythonのバージョン:3.7.7
Pytorchのバージョン:1.5.0(GPU用)
CUDAのバージョン:10.2
使用しているGPU:NVIDIA GeForce RTX 2060

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

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

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

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

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

Bindi

2020/07/12 04:27

タイトルを変更してください。エラーメッセージだけでは、何をあなたが聞きたいのかわかりません。 内容を変更してください。ソースコードを載せただけでは、どう答えたら良いのかわかりません。 エラーメッセージの内容を理解してください。 コピー・アンド・ペーストをしないで、まず文章だけで説明する。そして、その補足としてソースコードやエラーメッセージの内容を入れてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問