ChainerRL로 라인 트레이서하기
14989 단어 강화 학습DeepLearningChainer기계 학습
그래서 Chainer의 강화 학습판 ChainerRL이 공개되었습니다.
요즘 손을 너무 넓혀서 정중한 일을 할 수 없는 가운데,
30분 x 2일 만에 Double DQN으로 라인 트레이서를 할 수 있었습니다. 도서관 편리하고 도움이!
사용환경
환경 및 샘플 리포지토리
Chachay/Gym_LineFollower: Simple Open AI gym like Environment
GUI tool kit를 Qt5화했습니다
ChainerRL
pip로 넣으려고 하면 Arcade Learning Environment 넣으려고 이끼.
ALE를 Windows에 밀어 넣는 데 시간이 걸릴 수 있지만,
Windows에서 pong하고 싶지 않아서 바로 가기! !
1. GitHub에서 리포지토리 삭제
GitHub - pfnet/chainerrl: ChainerRL is a deep reinforcement learning library built on top of Chainer.
2. 동봉된 ChainerRL 폴더를 작업 폴더로 옮기기
이후 exampl2.py와 같은 폴더
라인 트레이서 환경 정의
라인 트레이서의 환경을 OpenAI I/F로 했다 - Qiita 의 환경은, 라인 트레이서가 받는 바퀴 속도를 연속치로 환경을 정의하고 있습니다.
이것을 이산치로 하기 위해(때문에), 상속으로 이산치 환경으로 다시 합니다.
동시에 첫 번째 센싱을 4스텝분의 이력 관측으로 합니다.
class SState(object):
def __init__(self, STATE_NUM, DIM):
self.STATE_NUM = STATE_NUM
self.DIM = DIM
self.seq = np.zeros((STATE_NUM, DIM), dtype=np.float32)
def push_s(self, state):
self.seq[1:self.STATE_NUM ] = self.seq[0:self.STATE_NUM -1]
self.seq[0] = state
def reset(self):
self.seq = np.zeros_like(self.seq)
def fill_s(self, state):
for i in range(0, self.STATE_NUM):
self.seq[i] = state
# Define Agent And Environment
class LineTracerEnvDiscrete(LineTracerEnv):
actions = np.array([[0.5, 0.1], [1.0, 1.0], [0.1, 0.5]])
OBSDIM = 4
def __init__(self):
self.action_space_d = spaces.Discrete(self.actions.shape[0])
self.observation_space_d = spaces.Discrete(self.OBSDIM)
self.MyState = SState(self.OBSDIM, 1)
super().__init__()
def _step(self, action):
tempState, tmpReward, tmpDone, tmpInfo = super()._step(self.actions[action])
self.MyState.push_s(tempState)
return self.MyState.seq.flatten(), tmpReward, tmpDone, tmpInfo
def _reset(self):
s = super()._reset()
self.MyState.reset()
return self.MyState.seq.flatten()
env = LineTracerEnvDiscrete()
그리고는 후지타씨( @mooopann )의 빠른 시작 부터 코피페·코피페
env.OBSDIM, env.action_space_d.n 및 env.action_space_d.sample만 약간 주의.
q_func = chainerrl.q_functions.FCStateQFunctionWithDiscreteAction(
env.OBSDIM, env.action_space_d.n,
n_hidden_layers=2, n_hidden_channels=50)
optimizer = chainer.optimizers.Adam(eps=1e-2)
optimizer.setup(q_func)
gamma = 0.95
explorer = chainerrl.explorers.ConstantEpsilonGreedy(
epsilon=0.3, random_action_func=env.action_space_d.sample)
replay_buffer = chainerrl.replay_buffer.ReplayBuffer(capacity=10 ** 6)
agent = chainerrl.agents.DoubleDQN(
q_func, optimizer, replay_buffer, gamma, explorer,
replay_start_size=500, update_frequency=1,
target_update_frequency=100)
실행
움직인다…
python example2.py
※ 주회로 돌 수 있는 행동을 학습할 수 있었는지는…
그 근처는 과거 기사를… ⇒ 라인 트레이서를 Deep Q Learning에서 교육하기 - Chainer - Qiita
감상
첫날 : 순 30 분
ChainerRL을 사용하려고 했지만 견본을 쓰는 방법이 htps // t. 코 / cDBp9F 구우 5이 아닌 곳까지 이해하고 끝났습니다. ENV 환경을 연속 값으로 만들고 있지만, 이산 값으로 다시 정의한 환경으로의 재작성이 필요하다>.htps // t. 코/x57에 kRzQfj — chachay (@chachay).
2일차: 순 30분
pip로 넣으려고 하면 Arcade Learning Environment 넣으려고 이끼.
ALE를 Windows에 밀어 넣는 데 시간이 걸릴 수 있지만,
Windows에서 pong하고 싶지 않아서 바로 가기! !
1. GitHub에서 리포지토리 삭제
GitHub - pfnet/chainerrl: ChainerRL is a deep reinforcement learning library built on top of Chainer.
2. 동봉된 ChainerRL 폴더를 작업 폴더로 옮기기
이후 exampl2.py와 같은 폴더
라인 트레이서 환경 정의
라인 트레이서의 환경을 OpenAI I/F로 했다 - Qiita 의 환경은, 라인 트레이서가 받는 바퀴 속도를 연속치로 환경을 정의하고 있습니다.
이것을 이산치로 하기 위해(때문에), 상속으로 이산치 환경으로 다시 합니다.
동시에 첫 번째 센싱을 4스텝분의 이력 관측으로 합니다.
class SState(object):
def __init__(self, STATE_NUM, DIM):
self.STATE_NUM = STATE_NUM
self.DIM = DIM
self.seq = np.zeros((STATE_NUM, DIM), dtype=np.float32)
def push_s(self, state):
self.seq[1:self.STATE_NUM ] = self.seq[0:self.STATE_NUM -1]
self.seq[0] = state
def reset(self):
self.seq = np.zeros_like(self.seq)
def fill_s(self, state):
for i in range(0, self.STATE_NUM):
self.seq[i] = state
# Define Agent And Environment
class LineTracerEnvDiscrete(LineTracerEnv):
actions = np.array([[0.5, 0.1], [1.0, 1.0], [0.1, 0.5]])
OBSDIM = 4
def __init__(self):
self.action_space_d = spaces.Discrete(self.actions.shape[0])
self.observation_space_d = spaces.Discrete(self.OBSDIM)
self.MyState = SState(self.OBSDIM, 1)
super().__init__()
def _step(self, action):
tempState, tmpReward, tmpDone, tmpInfo = super()._step(self.actions[action])
self.MyState.push_s(tempState)
return self.MyState.seq.flatten(), tmpReward, tmpDone, tmpInfo
def _reset(self):
s = super()._reset()
self.MyState.reset()
return self.MyState.seq.flatten()
env = LineTracerEnvDiscrete()
그리고는 후지타씨( @mooopann )의 빠른 시작 부터 코피페·코피페
env.OBSDIM, env.action_space_d.n 및 env.action_space_d.sample만 약간 주의.
q_func = chainerrl.q_functions.FCStateQFunctionWithDiscreteAction(
env.OBSDIM, env.action_space_d.n,
n_hidden_layers=2, n_hidden_channels=50)
optimizer = chainer.optimizers.Adam(eps=1e-2)
optimizer.setup(q_func)
gamma = 0.95
explorer = chainerrl.explorers.ConstantEpsilonGreedy(
epsilon=0.3, random_action_func=env.action_space_d.sample)
replay_buffer = chainerrl.replay_buffer.ReplayBuffer(capacity=10 ** 6)
agent = chainerrl.agents.DoubleDQN(
q_func, optimizer, replay_buffer, gamma, explorer,
replay_start_size=500, update_frequency=1,
target_update_frequency=100)
실행
움직인다…
python example2.py
※ 주회로 돌 수 있는 행동을 학습할 수 있었는지는…
그 근처는 과거 기사를… ⇒ 라인 트레이서를 Deep Q Learning에서 교육하기 - Chainer - Qiita
감상
첫날 : 순 30 분
ChainerRL을 사용하려고 했지만 견본을 쓰는 방법이 htps // t. 코 / cDBp9F 구우 5이 아닌 곳까지 이해하고 끝났습니다. ENV 환경을 연속 값으로 만들고 있지만, 이산 값으로 다시 정의한 환경으로의 재작성이 필요하다>.htps // t. 코/x57에 kRzQfj — chachay (@chachay).
2일차: 순 30분
class SState(object):
def __init__(self, STATE_NUM, DIM):
self.STATE_NUM = STATE_NUM
self.DIM = DIM
self.seq = np.zeros((STATE_NUM, DIM), dtype=np.float32)
def push_s(self, state):
self.seq[1:self.STATE_NUM ] = self.seq[0:self.STATE_NUM -1]
self.seq[0] = state
def reset(self):
self.seq = np.zeros_like(self.seq)
def fill_s(self, state):
for i in range(0, self.STATE_NUM):
self.seq[i] = state
# Define Agent And Environment
class LineTracerEnvDiscrete(LineTracerEnv):
actions = np.array([[0.5, 0.1], [1.0, 1.0], [0.1, 0.5]])
OBSDIM = 4
def __init__(self):
self.action_space_d = spaces.Discrete(self.actions.shape[0])
self.observation_space_d = spaces.Discrete(self.OBSDIM)
self.MyState = SState(self.OBSDIM, 1)
super().__init__()
def _step(self, action):
tempState, tmpReward, tmpDone, tmpInfo = super()._step(self.actions[action])
self.MyState.push_s(tempState)
return self.MyState.seq.flatten(), tmpReward, tmpDone, tmpInfo
def _reset(self):
s = super()._reset()
self.MyState.reset()
return self.MyState.seq.flatten()
env = LineTracerEnvDiscrete()
q_func = chainerrl.q_functions.FCStateQFunctionWithDiscreteAction(
env.OBSDIM, env.action_space_d.n,
n_hidden_layers=2, n_hidden_channels=50)
optimizer = chainer.optimizers.Adam(eps=1e-2)
optimizer.setup(q_func)
gamma = 0.95
explorer = chainerrl.explorers.ConstantEpsilonGreedy(
epsilon=0.3, random_action_func=env.action_space_d.sample)
replay_buffer = chainerrl.replay_buffer.ReplayBuffer(capacity=10 ** 6)
agent = chainerrl.agents.DoubleDQN(
q_func, optimizer, replay_buffer, gamma, explorer,
replay_start_size=500, update_frequency=1,
target_update_frequency=100)
움직인다…
python example2.py
※ 주회로 돌 수 있는 행동을 학습할 수 있었는지는…
그 근처는 과거 기사를… ⇒ 라인 트레이서를 Deep Q Learning에서 교육하기 - Chainer - Qiita
감상
첫날 : 순 30 분
ChainerRL을 사용하려고 했지만 견본을 쓰는 방법이 htps // t. 코 / cDBp9F 구우 5이 아닌 곳까지 이해하고 끝났습니다. ENV 환경을 연속 값으로 만들고 있지만, 이산 값으로 다시 정의한 환경으로의 재작성이 필요하다>.htps // t. 코/x57에 kRzQfj — chachay (@chachay).
2일차: 순 30분
요약
연속치를 평상시 입력치로서 취급하고 있는 엔지니어로서는, 연속치에 대해서 행동 후보(이산화화)를 에이전트로 정의할 수 있도록 해, 이산·연속값간의 사이를 가져와 주면 도움이 된다. gym의 디자인 컨셉에서 벗어나더라도. - chachay (@chachay) February 20, 2017
스크립트
February 20, 2017
example2.py 참조
Reference
이 문제에 관하여(ChainerRL로 라인 트레이서하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/chachay/items/dabb144b1aa54dc77652
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(ChainerRL로 라인 트레이서하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/chachay/items/dabb144b1aa54dc77652텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)