上記のコードで強化学習を学習しております。
5つ目のセルを以下に抜粋します。
質問1
foward が5つ目のセル以外で使われているところを発見できないのですが、どこで使用しているのでしょうか?
この関数においてニューラルネットワークに学習データを与え、出力していると考えているのですが...
無いのであればなぜこの関数は書かれていて、他のどこでニューラルネットワークに学習データを与えているのでしょうか?
質問2
act関数の中に
value, actor_output = self(x)
が見られるのですが、self(x)とは何ですか?
selfはインスタンス自身という認識で今までこのような使い方をしたことがなく疑問を持っています。
推測としては
ニューラルネットワークに学習データを与え、出てきた出力をvalue, actor_outputに格納していると考えています。
するとself(x)はforward関数を表すのでしょうか?
質問3
また、以下に質問2に対する自分の理解の為に作成したコードとエラー文を載せておきます。
エラー文を見るとself(x)の使い方にエラーが出ていると考えています。
この書き方はPyTorch特有の書き方なのでしょうか?
質問が多く申し訳ありませんが、一つにでも答えていただけると大変ありがたいです。
よろしければご回答の程よろしくお願いします。
最後となりますが、teratailになれていないため質問の仕方等わかりずらい、ルールに基づいていない等あると思います。
その際は是非ご指摘お願いします。
#5つ目 class Net(nn.Module): def __init__(self, n_in, n_mid, n_out): super(Net, self).__init__() self.fc1 = nn.Linear(n_in, n_mid) self.fc2 = nn.Linear(n_mid, n_mid) self.actor = nn.Linear(n_mid, n_out) # 行動を決めるので出力は行動の種類数 self.critic = nn.Linear(n_mid, 1) # 状態価値なので出力は1つ def forward(self, x): '''ネットワークのフォワード計算を定義します''' h1 = F.relu(self.fc1(x)) h2 = F.relu(self.fc2(h1)) critic_output = self.critic(h2) # 状態価値の計算 actor_output = self.actor(h2) # 行動の計算 return critic_output, actor_output def act(self, x): '''状態xから行動を確率的に求めます''' value, actor_output = self(x) # dim=1で行動の種類方向にsoftmaxを計算 action_probs = F.softmax(actor_output, dim=1) action = action_probs.multinomial(num_samples=1) # dim=1で行動の種類方向に確率計算 return action
#自作 class A: def __init__(self,a1): self.unk = a1 def forward(self,x): y = x + 2 z = x*3 print("forwardに入った") return y,z def act(self,x): print("actに入った") y,z = self(x) return y,z a = A(1) print(a.act(5)) #エラー文 TypeError: 'A' object is not callable
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/30 23:27
2020/07/01 02:03 編集
2020/07/01 13:18