diff --git a/01.DQN.ipynb b/01.DQN.ipynb index 2544213..5d0a53d 100644 --- a/01.DQN.ipynb +++ b/01.DQN.ipynb @@ -386,7 +386,7 @@ " episode_reward = 0\n", " \n", " if np.mean(model.rewards[-10:]) > 19:\n", - " plot(frame_idx, all_rewards, losses, timedelta(seconds=int(timer()-start)))\n", + " plot(frame_idx, model.rewards, model.losses, model.sigma_parameter_mag, timedelta(seconds=int(timer()-start)))\n", " break\n", "\n", " if frame_idx % 10000 == 0:\n", @@ -420,7 +420,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.3" + "version": "3.6.5" } }, "nbformat": 4, diff --git a/02.NStep_DQN.ipynb b/02.NStep_DQN.ipynb index e3b6376..190401c 100644 --- a/02.NStep_DQN.ipynb +++ b/02.NStep_DQN.ipynb @@ -342,7 +342,7 @@ " episode_reward = 0\n", " \n", " if np.mean(model.rewards[-10:]) > 19:\n", - " plot(frame_idx, all_rewards, losses, timedelta(seconds=int(timer()-start)))\n", + " plot(frame_idx, model.rewards, model.losses, model.sigma_parameter_mag, timedelta(seconds=int(timer()-start)))\n", " break\n", "\n", " if frame_idx % 10000 == 0:\n", @@ -376,7 +376,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.3" + "version": "3.6.5" } }, "nbformat": 4, diff --git a/03.Double_DQN.ipynb b/03.Double_DQN.ipynb index 223ffd3..60c2aba 100644 --- a/03.Double_DQN.ipynb +++ b/03.Double_DQN.ipynb @@ -193,7 +193,7 @@ " episode_reward = 0\n", " \n", " if np.mean(model.rewards[-10:]) > 19:\n", - " plot(frame_idx, all_rewards, losses, timedelta(seconds=int(timer()-start)))\n", + " plot(frame_idx, model.rewards, model.losses, model.sigma_parameter_mag, timedelta(seconds=int(timer()-start)))\n", " break\n", "\n", " if frame_idx % 10000 == 0:\n", @@ -227,7 +227,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.3" + "version": "3.6.5" } }, "nbformat": 4, diff --git a/04.Dueling_DQN.ipynb b/04.Dueling_DQN.ipynb index 7992833..b0fda1b 100644 --- a/04.Dueling_DQN.ipynb +++ b/04.Dueling_DQN.ipynb @@ -243,7 +243,7 @@ " episode_reward = 0\n", " \n", " if np.mean(model.rewards[-10:]) > 19:\n", - " plot(frame_idx, all_rewards, losses, timedelta(seconds=int(timer()-start)))\n", + " plot(frame_idx, model.rewards, model.losses, model.sigma_parameter_mag, timedelta(seconds=int(timer()-start)))\n", " break\n", "\n", " if frame_idx % 10000 == 0:\n", @@ -277,7 +277,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.3" + "version": "3.6.5" } }, "nbformat": 4, diff --git a/05.DQN-NoisyNets.ipynb b/05.DQN-NoisyNets.ipynb index eb9c9c4..1cf460b 100644 --- a/05.DQN-NoisyNets.ipynb +++ b/05.DQN-NoisyNets.ipynb @@ -314,7 +314,7 @@ " episode_reward = 0\n", " \n", " if np.mean(model.rewards[-10:]) > 19:\n", - " plot(frame_idx, all_rewards, losses, timedelta(seconds=int(timer()-start)))\n", + " plot(frame_idx, model.rewards, model.losses, model.sigma_parameter_mag, timedelta(seconds=int(timer()-start)))\n", " break\n", "\n", " if frame_idx % 10000 == 0:\n", @@ -348,7 +348,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.3" + "version": "3.6.5" } }, "nbformat": 4, diff --git a/06.DQN_PriorityReplay.ipynb b/06.DQN_PriorityReplay.ipynb index 9d90a1c..48ef05b 100644 --- a/06.DQN_PriorityReplay.ipynb +++ b/06.DQN_PriorityReplay.ipynb @@ -294,7 +294,7 @@ " episode_reward = 0\n", " \n", " if np.mean(model.rewards[-10:]) > 19:\n", - " plot(frame_idx, all_rewards, losses, timedelta(seconds=int(timer()-start)))\n", + " plot(frame_idx, model.rewards, model.losses, model.sigma_parameter_mag, timedelta(seconds=int(timer()-start)))\n", " break\n", "\n", " if frame_idx % 10000 == 0:\n", @@ -328,7 +328,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.3" + "version": "3.6.5" } }, "nbformat": 4, diff --git a/07.Categorical-DQN.ipynb b/07.Categorical-DQN.ipynb index 750631c..32301ec 100644 --- a/07.Categorical-DQN.ipynb +++ b/07.Categorical-DQN.ipynb @@ -298,7 +298,7 @@ " episode_reward = 0\n", " \n", " if np.mean(model.rewards[-10:]) > 19:\n", - " plot(frame_idx, all_rewards, losses, timedelta(seconds=int(timer()-start)))\n", + " plot(frame_idx, model.rewards, model.losses, model.sigma_parameter_mag, timedelta(seconds=int(timer()-start)))\n", " break\n", "\n", " if frame_idx % 10000 == 0:\n", @@ -332,7 +332,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.3" + "version": "3.6.5" } }, "nbformat": 4, diff --git a/08.Rainbow.ipynb b/08.Rainbow.ipynb index ece8811..5bc76f9 100644 --- a/08.Rainbow.ipynb +++ b/08.Rainbow.ipynb @@ -321,7 +321,7 @@ " episode_reward = 0\n", " \n", " if np.mean(model.rewards[-10:]) > 19:\n", - " plot(frame_idx, all_rewards, losses, timedelta(seconds=int(timer()-start)))\n", + " plot(frame_idx, model.rewards, model.losses, model.sigma_parameter_mag, timedelta(seconds=int(timer()-start)))\n", " break\n", "\n", " if frame_idx % 10000 == 0:\n", @@ -355,7 +355,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.3" + "version": "3.6.5" } }, "nbformat": 4, diff --git a/09.QuantileRegression-DQN.ipynb b/09.QuantileRegression-DQN.ipynb index 1d93f88..f488db7 100644 --- a/09.QuantileRegression-DQN.ipynb +++ b/09.QuantileRegression-DQN.ipynb @@ -285,7 +285,7 @@ " episode_reward = 0\n", " \n", " if np.mean(model.rewards[-10:]) > 19:\n", - " plot(frame_idx, all_rewards, losses, timedelta(seconds=int(timer()-start)))\n", + " plot(frame_idx, model.rewards, model.losses, model.sigma_parameter_mag, timedelta(seconds=int(timer()-start)))\n", " break\n", "\n", " if frame_idx % 10000 == 0:\n", @@ -319,7 +319,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.3" + "version": "3.6.5" } }, "nbformat": 4, diff --git a/10.Quantile-Rainbow.ipynb b/10.Quantile-Rainbow.ipynb index 0f0f3a0..fffa769 100644 --- a/10.Quantile-Rainbow.ipynb +++ b/10.Quantile-Rainbow.ipynb @@ -302,7 +302,7 @@ " episode_reward = 0\n", " \n", " if np.mean(model.rewards[-10:]) > 19:\n", - " plot(frame_idx, all_rewards, losses, timedelta(seconds=int(timer()-start)))\n", + " plot(frame_idx, model.rewards, model.losses, model.sigma_parameter_mag, timedelta(seconds=int(timer()-start)))\n", " break\n", "\n", " if frame_idx % 10000 == 0:\n", @@ -336,7 +336,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.3" + "version": "3.6.5" } }, "nbformat": 4, diff --git a/11.DRQN.ipynb b/11.DRQN.ipynb index bc05d3f..6d2459a 100644 --- a/11.DRQN.ipynb +++ b/11.DRQN.ipynb @@ -335,14 +335,14 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": { "scrolled": true }, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -382,7 +382,7 @@ " episode_reward = 0\n", " \n", " if np.mean(model.rewards[-10:]) > 19:\n", - " plot(frame_idx, all_rewards, losses, timedelta(seconds=int(timer()-start)))\n", + " plot(frame_idx, model.rewards, model.losses, model.sigma_parameter_mag, timedelta(seconds=int(timer()-start)))\n", " break\n", "\n", " if frame_idx % 10000 == 0:\n", diff --git a/agents/DQN.py b/agents/DQN.py index 3f14a7e..96e3407 100644 --- a/agents/DQN.py +++ b/agents/DQN.py @@ -58,8 +58,8 @@ def __init__(self, static_policy=False, env=None, config=None): self.nstep_buffer = [] def declare_networks(self): - self.model = DQN(self.num_feats, self.num_actions, noisy=self.noisy, sigma_init=self.sigma_init, body=AtariBody) - self.target_model = DQN(self.num_feats, self.num_actions, noisy=self.noisy, sigma_init=self.sigma_init, body=AtariBody) + self.model = DQN(self.num_feats, self.num_actions, noisy=self.noisy, sigma_init=self.sigma_init, body=SimpleBody) + self.target_model = DQN(self.num_feats, self.num_actions, noisy=self.noisy, sigma_init=self.sigma_init, body=SimpleBody) def declare_memory(self): self.memory = ExperienceReplayMemory(self.experience_replay_size) if not self.priority_replay else PrioritizedReplayMemory(self.experience_replay_size, self.priority_alpha, self.priority_beta_start, self.priority_beta_frames) diff --git a/dqn_devel.py b/dqn_devel.py index a91e1f8..a89883f 100644 --- a/dqn_devel.py +++ b/dqn_devel.py @@ -3,7 +3,7 @@ from IPython.display import clear_output import matplotlib -matplotlib.use("agg") +#matplotlib.use("agg") from matplotlib import pyplot as plt #%matplotlib inline @@ -76,17 +76,17 @@ def plot(frame_idx, rewards, losses, sigma, elapsed_time): plt.title('noisy param magnitude') plt.plot(sigma) plt.show() - #print('frame %s. reward: %s. time: %s' % (frame_idx, np.mean(rewards[-10:]), elapsed_time)) + print('frame %s. reward: %s. time: %s' % (frame_idx, np.mean(rewards[-10:]), elapsed_time)) if __name__=='__main__': start=timer() - env_id = "PongNoFrameskip-v4" + '''env_id = "PongNoFrameskip-v4" env = make_atari(env_id) env = wrap_deepmind(env, frame_stack=False) - env = wrap_pytorch(env) - #env = gym.make('CartPole-v0') + env = wrap_pytorch(env)''' + env = gym.make('CartPole-v0') #env = wrappers.Monitor(env, 'Delete', force=True) model = Model(env=env, config=config) diff --git a/networks/networks.py b/networks/networks.py index e24799a..164a70d 100644 --- a/networks/networks.py +++ b/networks/networks.py @@ -289,6 +289,55 @@ def forward(self, inputs): def feature_size(self, input_shape): return self.conv3(self.conv2(self.conv1(torch.zeros(1, *input_shape)))).view(1, -1).size(1) + def layer_init(self, module, weight_init, bias_init, gain=1): + weight_init(module.weight.data, gain=gain) + bias_init(module.bias.data) + return module + + +class ActorCriticER(nn.Module): + def __init__(self, input_shape, num_actions): + super(ActorCriticER, self).__init__() + + init_ = lambda m: self.layer_init(m, nn.init.orthogonal_, + lambda x: nn.init.constant_(x, 0), + nn.init.calculate_gain('relu')) + + self.conv1 = init_(nn.Conv2d(input_shape[0], 32, kernel_size=8, stride=4)) + self.conv2 = init_(nn.Conv2d(32, 64, kernel_size=4, stride=2)) + self.conv3 = init_(nn.Conv2d(64, 32, kernel_size=3, stride=1)) + self.fc1 = init_(nn.Linear(self.feature_size(input_shape), 512)) + + init_ = lambda m: self.layer_init(m, nn.init.orthogonal_, + lambda x: nn.init.constant_(x, 0)) + + self.critic_linear = init_(nn.Linear(512, num_actions)) + + init_ = lambda m: self.layer_init(m, nn.init.orthogonal_, + lambda x: nn.init.constant_(x, 0), gain=0.01) + + self.actor_linear = init_(nn.Linear(512, num_actions)) + + self.train() + + def forward(self, inputs): + x = F.relu(self.conv1(inputs/255.0)) + x = F.relu(self.conv2(x)) + x = F.relu(self.conv3(x)) + x = x.view(x.size(0), -1) + + x = F.relu(self.fc1(x)) + + q_value = self.critic_linear(x) + logits = self.actor_linear(x) + policy = F.softmax(logits, dim=1) + value = (policy * q_value).sum(-1, keepdim=True) + + return logits, policy, value, q_value + + def feature_size(self, input_shape): + return self.conv3(self.conv2(self.conv1(torch.zeros(1, *input_shape)))).view(1, -1).size(1) + def layer_init(self, module, weight_init, bias_init, gain=1): weight_init(module.weight.data, gain=gain) bias_init(module.bias.data) diff --git a/saved_agents/model.dump b/saved_agents/model.dump index 9e45e54..e961fe7 100644 Binary files a/saved_agents/model.dump and b/saved_agents/model.dump differ diff --git a/saved_agents/optim.dump b/saved_agents/optim.dump index 72893fe..e8da186 100644 Binary files a/saved_agents/optim.dump and b/saved_agents/optim.dump differ