chainerrlの使い方 (python)



Python
Pythonとは
基本的な使い方
IDLE
Jupyter Notebook
Markdown
コマンドプロンプトで実行
仮想環境の構築
仮想環境でIDLEを実行
ライブラリのインストール
pipの使い方
numpy , matplotlib等
graphviz
pytorch
Mecab
Pythonの関数:一覧
共通関数
append , extend
class
copy
csv.reader
csv.writer
def , return
dict , defaultdict
enumerate
exit
for
if
import
in
input
lambda
len
list
min/max
OrderedDict
open/close
os
pickle
print
range
re.split
read/readline
round/floor/ceil
split
sys.argv
time
while
write
zip
・特殊メソッド
 ・__name__
 ・__iter__ , __next__
正規表現、メタ文字
データの型の種類
四則演算 (+ , - , * , /)
コメントアウト (# , ''')
numpy
append
arange
argmax/argmin
array
asfarray
astype , dtype
digitize
dot
hstack/vstack
linalg.solve
linspace
mean
meshgrid
mgrid
ndim
ndmin
pad
poly1d
polyfit
prod
random
reshape
savetxt/loadtxt
shape
std
transpose
where
zeros/zeros_like
scipy
expit
imread
interpolate
matplotlib
imshow
figure
pcolormesh
plot
scatter
scikit-learn
GaussianNB
KMeans
KNeighborsClassifier
SVC
tree
keras
chainer
chainerrl
pytorch
BCELoss , MSELoss
Embedding
device
Sequential
Dataset, Dataloader
RNN, LSTM
OpenAI gym
Blackjack-v0
CartPole-v0
tkinter
frame, grid
画像表示
画像を切り取り表示
画像を保存
目的別
ステップ関数
1 of K 符号化法
線形補間
配列に番号をつける

公開日:2020/4/12         

■説明
chainerrlは強化学習の計算を容易に行う関数です。インストール方法はこちら

■関数
こちらの強化学習実装例で説明します。chainerrl部分は以下になります。

<基本関数>

def rand_act(): return np.random.choice([0,1]) # ランダムアクション関数を定義要

① q_func = chainerrl.action_value.DiscreteActionValue(h2)

② explorer = chainerrl.explorers.LinearDecayEpsilonGreedy(start_epsilon=1.0, end_epsilon=0.1,
decay_steps=n_episode, random_action_func=rand_act) # ε-greedy

③ ex_rep = chainerrl.replay_buffer.ReplayBuffer(capacity=10 ** 6) # 経験再生

④ phi = lambda x: x.astype(np.float32, copy=False) # 入力型定義

⑤ agent = chainerrl.agents.DQN(q_func, opt, replay_buf, gamma, explorer,replay_start_size=500,
update_interval=1, target_update_interval=100, phi=phi)

⑥ action = agent.act_and_train(state, reward) # アクション決定

⑦ agent.stop_episode_and_train(state, reward, done) # DQN重み更新


動作の理解としては、強化学習の行動を決める⑥が最終アウトプット、 ⑥を実現するのが①、①を実現するのが⑤、⑤へのINPUTが②③④となります。 ⑦はDQN内のニューラルネットワークに使われる重みを更新します。

 

<load関数について>
シミュレーションに時間がかかる場合、学習の途中経過を保存して別の機会に途中から学習を再開するには、load関数を使用します。

agent.load('agent') # 学習開始前に一度定義。'agent'は学習値が入ったフォルダ名


ただしこの関数は、学習値は保存しますがε-greedyの値がリセットされてしまいますので、少し工夫が必要です。 chainerrlのε-greedyの処理が不明なのですが、以下部分のstart_epsilon=1.0という部分を修正します。

explorer = chainerrl.explorers.LinearDecayEpsilonGreedy(start_epsilon=1.0, end_epsilon=0.1,\
                decay_steps=n_episode, random_action_func=rand_act)


ε-greedy法の関数を以下の指数関数と仮定します。

 

この時、係数aが解らないので、係数aを求める必要があります。以下のとおり。

 

従って途中から学習を開始する場合は、上記xに一時停止した時のエピソード数を入れて算出されたyをstart_epsilonに入れれば良いです。 (ただしこれは正確ではありません。そこから新たな指数関数としての減衰が始まるので、初期の減衰量が多いです)









サブチャンネルあります。⇒ 何かのお役に立てればと

関連記事一覧



Python
Pythonとは
基本的な使い方
IDLE
Jupyter Notebook
Markdown
コマンドプロンプトで実行
仮想環境の構築
仮想環境でIDLEを実行
ライブラリのインストール
pipの使い方
numpy , matplotlib等
graphviz
pytorch
Mecab
Pythonの関数:一覧
共通関数
append , extend
class
copy
csv.reader
csv.writer
def , return
dict , defaultdict
enumerate
exit
for
if
import
in
input
lambda
len
list
min/max
OrderedDict
open/close
os
pickle
print
range
re.split
read/readline
round/floor/ceil
split
sys.argv
time
while
write
zip
・特殊メソッド
 ・__name__
 ・__iter__ , __next__
正規表現、メタ文字
データの型の種類
四則演算 (+ , - , * , /)
コメントアウト (# , ''')
numpy
append
arange
argmax/argmin
array
asfarray
astype , dtype
digitize
dot
hstack/vstack
linalg.solve
linspace
mean
meshgrid
mgrid
ndim
ndmin
pad
poly1d
polyfit
prod
random
reshape
savetxt/loadtxt
shape
std
transpose
where
zeros/zeros_like
scipy
expit
imread
interpolate
matplotlib
imshow
figure
pcolormesh
plot
scatter
scikit-learn
GaussianNB
KMeans
KNeighborsClassifier
SVC
tree
keras
chainer
chainerrl
pytorch
BCELoss , MSELoss
Embedding
device
Sequential
Dataset, Dataloader
RNN, LSTM
OpenAI gym
Blackjack-v0
CartPole-v0
tkinter
frame, grid
画像表示
画像を切り取り表示
画像を保存
目的別
ステップ関数
1 of K 符号化法
線形補間
配列に番号をつける