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

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

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

Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。

深層学習

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

強化学習

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

Python

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

Q&A

解決済

1回答

795閲覧

ChainerRLのact_and_trainメソッドでエラー

ShionHonda

総合スコア11

Chainer

Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。

深層学習

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

強化学習

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

Python

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

0グッド

0クリップ

投稿2018/06/20 08:12

前提・実現したいこと

Chainerを使ってオセロの棋譜を学習させたCNNを、今度はChainerRLのREINFORCEアルゴリズムを使って強化学習させようとしています。
しかし、掲載したコードを実行すると、agent.act_and_trainに呼ばれるmodel(Classifierでラップされている)で
TypeError: call() missing 1 required positional argument: 'x'
と出てしまいます。
引数でbatch_obsを取っているはずなのですが、どうしてでしょうか?
よろしくお願いします。

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

Traceback (most recent call last): File "test_train.py", line 63, in <module> main() File "test_train.py", line 45, in main action = agent.act_and_train(obs, reward) File "C:\Users\26xor\Anaconda3\lib\site-packages\chainerrl\agents\reinforce.py", line 79, in act_and_train action_distrib = self.model(batch_obs) File "C:\Users\26xor\Anaconda3\lib\site-packages\chainer\links\model\classifier.py", line 114, in __call__ self.y = self.predictor(*args, **kwargs) TypeError: __call__() missing 1 required positional argument: 'x'

該当のソースコード

Python

1'''強化学習のコード''' 2 3model1 = L.Classifier(SLPolicy.SLPolicyNet(), lossfun=softmax_cross_entropy) # 対戦させるモデル 4serializers.load_npz("./models/rl/model0.npz", model1) 5optimizer = optimizers.Adam() 6optimizer.setup(model1) 7optimizer.add_hook(chainer.optimizer_hooks.WeightDecay(5e-4)) 8model2 = L.Classifier(SLPolicy.SLPolicyNet(), lossfun=softmax_cross_entropy) # 対戦相手のモデル 9serializers.load_npz("./models/rl/model0.npz", model2) 10# REINFORCEアルゴリズムのエージェント 11agent = chainerrl.agents.REINFORCE(model1, optimizer, batchsize=N, backward_separately=False) 12 13for set in range(args.set): 14 env = rl_env.GameEnv(model1, model2) 15 for i in range(2*N): 16 obs = env.reset() # 盤面を表す行列 17 reward = 0 18 done = False 19 while not done: 20 action = agent.act_and_train(obs, reward) 21 obs, reward, done, _ = env.step(action) 22 23 agent.stop_episode_and_train(obs, judge, done=True)

Python

1'''ネットワークを定義するクラス''' 2 3import chainer 4import chainer.functions as F 5import chainer.links as L 6 7class Block(chainer.Chain): 8 def __init__(self, out_channels, ksize, pad=1): 9 super(Block, self).__init__() 10 with self.init_scope(): 11 self.conv = L.Convolution2D(None, out_channels, ksize, pad=pad) 12 13 def __call__(self, x): 14 h = self.conv(x) 15 return F.relu(h) 16 17class SLPolicyNet(chainer.Chain): 18 def __init__(self): 19 ksize = 3 20 super(SLPolicyNet, self).__init__() 21 with self.init_scope(): 22 self.block1 = Block(64, ksize) 23 self.block2 = Block(128, ksize) 24 self.block3 = Block(128, ksize) 25 self.block4 = Block(128, ksize) 26 self.block5 = Block(128, ksize) 27 self.block6 = Block(128, ksize) 28 self.block7 = Block(128, ksize) 29 self.block8 = Block(128, ksize) 30 self.conv9 = L.Convolution2D(128, 1, 1, nobias=True) 31 self.bias10 = L.Bias(shape=(64)) 32 33 def __call__(self, x): # ここでエラー 34 h = self.block1(x) 35 h = self.block2(h) 36 h = self.block3(h) 37 h = self.block4(h) 38 h = self.block5(h) 39 h = self.block6(h) 40 h = self.block7(h) 41 h = self.block8(h) 42 h = self.conv9(h) 43 h = F.reshape(h, (-1,64)) 44 h = self.bias10(h) 45 return h

試したこと

ChainerRLのreinforce.pyをいじることもいろいろ試してみましたが、うまく動きません。
また、後でDistributionクラスが必要になって困ります。

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

Chainer 4.1.0
ChainerRL 0.3.0
Python 3.6.1

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

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

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

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

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

guest

回答1

0

自己解決

ChainerRLのact_and_trainを書き換えたらうまくいきました!

Python

1from chainerrl import distribution 2def act_and_train(self, obs, reward): 3 batch_obs = self.batch_states([obs], self.xp, self.phi) 4 action_distrib = distribution.SoftmaxDistribution(self.model.predictor(obs)) 5# 以下略

投稿2018/06/20 09:29

ShionHonda

総合スコア11

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問