diff --git a/Tutorial - Stable Baselines.ipynb b/Tutorial - Stable Baselines.ipynb index ea41993..40e5961 100644 --- a/Tutorial - Stable Baselines.ipynb +++ b/Tutorial - Stable Baselines.ipynb @@ -17,7 +17,8 @@ " - [Rodando um Episódio](#Rodando-um-Episódio)\n", " - [Avaliando o Agente](#Avaliando-o-Agente)\n", " - [Treinamento](#Treinamento)\n", - " - [Monitorando o Treinamento](#Monitorando-o-Treinamento)" + " - [Monitorando o Treinamento](#Monitorando-o-Treinamento)\n", + " - [Customizando a Rede Neural](#Customizando-a-Rede-Neural)" ] }, { @@ -171,7 +172,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "[-4.4577241e+00 -2.8991867e+38 6.6347457e-02 -1.0825361e+38]\n" + "[-1.2699846e+00 7.7429995e+37 2.1132760e-02 -2.2716169e+38]\n" ] } ], @@ -197,7 +198,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "1\n" + "0\n" ] } ], @@ -374,7 +375,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Recompensa Média: 27.92 +/- 6.144395820583176\n" + "Recompensa Média: 28.16 +/- 4.788987366865776\n" ] } ], @@ -412,16 +413,16 @@ "text": [ "-----------------------------\n", "| time/ | |\n", - "| fps | 827 |\n", + "| fps | 440 |\n", "| iterations | 1 |\n", - "| time_elapsed | 2 |\n", + "| time_elapsed | 4 |\n", "| total_timesteps | 2048 |\n", "-----------------------------\n", "-----------------------------------------\n", "| time/ | |\n", - "| fps | 543 |\n", + "| fps | 279 |\n", "| iterations | 2 |\n", - "| time_elapsed | 7 |\n", + "| time_elapsed | 14 |\n", "| total_timesteps | 4096 |\n", "| train/ | |\n", "| approx_kl | 0.008619683 |\n", @@ -437,9 +438,9 @@ "-----------------------------------------\n", "------------------------------------------\n", "| time/ | |\n", - "| fps | 497 |\n", + "| fps | 256 |\n", "| iterations | 3 |\n", - "| time_elapsed | 12 |\n", + "| time_elapsed | 23 |\n", "| total_timesteps | 6144 |\n", "| train/ | |\n", "| approx_kl | 0.0071383463 |\n", @@ -455,9 +456,9 @@ "------------------------------------------\n", "-----------------------------------------\n", "| time/ | |\n", - "| fps | 473 |\n", + "| fps | 248 |\n", "| iterations | 4 |\n", - "| time_elapsed | 17 |\n", + "| time_elapsed | 32 |\n", "| total_timesteps | 8192 |\n", "| train/ | |\n", "| approx_kl | 0.008124785 |\n", @@ -473,9 +474,9 @@ "-----------------------------------------\n", "-----------------------------------------\n", "| time/ | |\n", - "| fps | 461 |\n", + "| fps | 244 |\n", "| iterations | 5 |\n", - "| time_elapsed | 22 |\n", + "| time_elapsed | 41 |\n", "| total_timesteps | 10240 |\n", "| train/ | |\n", "| approx_kl | 0.005741713 |\n", @@ -491,9 +492,9 @@ "-----------------------------------------\n", "------------------------------------------\n", "| time/ | |\n", - "| fps | 449 |\n", + "| fps | 242 |\n", "| iterations | 6 |\n", - "| time_elapsed | 27 |\n", + "| time_elapsed | 50 |\n", "| total_timesteps | 12288 |\n", "| train/ | |\n", "| approx_kl | 0.0047061136 |\n", @@ -509,9 +510,9 @@ "------------------------------------------\n", "-----------------------------------------\n", "| time/ | |\n", - "| fps | 444 |\n", + "| fps | 239 |\n", "| iterations | 7 |\n", - "| time_elapsed | 32 |\n", + "| time_elapsed | 59 |\n", "| total_timesteps | 14336 |\n", "| train/ | |\n", "| approx_kl | 0.007546186 |\n", @@ -527,9 +528,9 @@ "-----------------------------------------\n", "-----------------------------------------\n", "| time/ | |\n", - "| fps | 436 |\n", + "| fps | 238 |\n", "| iterations | 8 |\n", - "| time_elapsed | 37 |\n", + "| time_elapsed | 68 |\n", "| total_timesteps | 16384 |\n", "| train/ | |\n", "| approx_kl | 0.011094484 |\n", @@ -545,9 +546,9 @@ "-----------------------------------------\n", "-----------------------------------------\n", "| time/ | |\n", - "| fps | 424 |\n", + "| fps | 238 |\n", "| iterations | 9 |\n", - "| time_elapsed | 43 |\n", + "| time_elapsed | 77 |\n", "| total_timesteps | 18432 |\n", "| train/ | |\n", "| approx_kl | 0.009602043 |\n", @@ -563,9 +564,9 @@ "-----------------------------------------\n", "-----------------------------------------\n", "| time/ | |\n", - "| fps | 415 |\n", + "| fps | 237 |\n", "| iterations | 10 |\n", - "| time_elapsed | 49 |\n", + "| time_elapsed | 86 |\n", "| total_timesteps | 20480 |\n", "| train/ | |\n", "| approx_kl | 0.007621056 |\n", @@ -581,9 +582,9 @@ "-----------------------------------------\n", "-----------------------------------------\n", "| time/ | |\n", - "| fps | 407 |\n", + "| fps | 236 |\n", "| iterations | 11 |\n", - "| time_elapsed | 55 |\n", + "| time_elapsed | 95 |\n", "| total_timesteps | 22528 |\n", "| train/ | |\n", "| approx_kl | 0.009817034 |\n", @@ -599,9 +600,9 @@ "-----------------------------------------\n", "-----------------------------------------\n", "| time/ | |\n", - "| fps | 399 |\n", + "| fps | 235 |\n", "| iterations | 12 |\n", - "| time_elapsed | 61 |\n", + "| time_elapsed | 104 |\n", "| total_timesteps | 24576 |\n", "| train/ | |\n", "| approx_kl | 0.006793539 |\n", @@ -623,9 +624,9 @@ "text": [ "------------------------------------------\n", "| time/ | |\n", - "| fps | 393 |\n", + "| fps | 234 |\n", "| iterations | 13 |\n", - "| time_elapsed | 67 |\n", + "| time_elapsed | 113 |\n", "| total_timesteps | 26624 |\n", "| train/ | |\n", "| approx_kl | 0.0009792595 |\n", @@ -644,7 +645,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 9, @@ -787,9 +788,9 @@ "| ep_len_mean | 23.5 |\n", "| ep_rew_mean | 23.5 |\n", "| time/ | |\n", - "| fps | 600 |\n", + "| fps | 445 |\n", "| iterations | 1 |\n", - "| time_elapsed | 3 |\n", + "| time_elapsed | 4 |\n", "| total_timesteps | 2048 |\n", "| train/ | |\n", "| approx_kl | 0.0058214897 |\n", @@ -808,9 +809,9 @@ "| ep_len_mean | 27.8 |\n", "| ep_rew_mean | 27.8 |\n", "| time/ | |\n", - "| fps | 406 |\n", + "| fps | 300 |\n", "| iterations | 2 |\n", - "| time_elapsed | 10 |\n", + "| time_elapsed | 13 |\n", "| total_timesteps | 4096 |\n", "| train/ | |\n", "| approx_kl | 0.00793977 |\n", @@ -829,9 +830,9 @@ "| ep_len_mean | 37.2 |\n", "| ep_rew_mean | 37.2 |\n", "| time/ | |\n", - "| fps | 371 |\n", + "| fps | 269 |\n", "| iterations | 3 |\n", - "| time_elapsed | 16 |\n", + "| time_elapsed | 22 |\n", "| total_timesteps | 6144 |\n", "| train/ | |\n", "| approx_kl | 0.010450134 |\n", @@ -850,9 +851,9 @@ "| ep_len_mean | 47.4 |\n", "| ep_rew_mean | 47.4 |\n", "| time/ | |\n", - "| fps | 357 |\n", + "| fps | 258 |\n", "| iterations | 4 |\n", - "| time_elapsed | 22 |\n", + "| time_elapsed | 31 |\n", "| total_timesteps | 8192 |\n", "| train/ | |\n", "| approx_kl | 0.0058218297 |\n", @@ -871,9 +872,9 @@ "| ep_len_mean | 61.3 |\n", "| ep_rew_mean | 61.3 |\n", "| time/ | |\n", - "| fps | 355 |\n", + "| fps | 251 |\n", "| iterations | 5 |\n", - "| time_elapsed | 28 |\n", + "| time_elapsed | 40 |\n", "| total_timesteps | 10240 |\n", "| train/ | |\n", "| approx_kl | 0.007066408 |\n", @@ -892,9 +893,9 @@ "| ep_len_mean | 78 |\n", "| ep_rew_mean | 78 |\n", "| time/ | |\n", - "| fps | 352 |\n", + "| fps | 247 |\n", "| iterations | 6 |\n", - "| time_elapsed | 34 |\n", + "| time_elapsed | 49 |\n", "| total_timesteps | 12288 |\n", "| train/ | |\n", "| approx_kl | 0.005684139 |\n", @@ -913,9 +914,9 @@ "| ep_len_mean | 92 |\n", "| ep_rew_mean | 92 |\n", "| time/ | |\n", - "| fps | 351 |\n", + "| fps | 244 |\n", "| iterations | 7 |\n", - "| time_elapsed | 40 |\n", + "| time_elapsed | 58 |\n", "| total_timesteps | 14336 |\n", "| train/ | |\n", "| approx_kl | 0.0030006566 |\n", @@ -934,9 +935,9 @@ "| ep_len_mean | 109 |\n", "| ep_rew_mean | 109 |\n", "| time/ | |\n", - "| fps | 344 |\n", + "| fps | 242 |\n", "| iterations | 8 |\n", - "| time_elapsed | 47 |\n", + "| time_elapsed | 67 |\n", "| total_timesteps | 16384 |\n", "| train/ | |\n", "| approx_kl | 0.001869061 |\n", @@ -955,9 +956,9 @@ "| ep_len_mean | 124 |\n", "| ep_rew_mean | 124 |\n", "| time/ | |\n", - "| fps | 342 |\n", + "| fps | 240 |\n", "| iterations | 9 |\n", - "| time_elapsed | 53 |\n", + "| time_elapsed | 76 |\n", "| total_timesteps | 18432 |\n", "| train/ | |\n", "| approx_kl | 0.0013776245 |\n", @@ -976,9 +977,9 @@ "| ep_len_mean | 144 |\n", "| ep_rew_mean | 144 |\n", "| time/ | |\n", - "| fps | 339 |\n", + "| fps | 239 |\n", "| iterations | 10 |\n", - "| time_elapsed | 60 |\n", + "| time_elapsed | 85 |\n", "| total_timesteps | 20480 |\n", "| train/ | |\n", "| approx_kl | 0.0051900977 |\n", @@ -1003,9 +1004,9 @@ "| ep_len_mean | 163 |\n", "| ep_rew_mean | 163 |\n", "| time/ | |\n", - "| fps | 338 |\n", + "| fps | 237 |\n", "| iterations | 11 |\n", - "| time_elapsed | 66 |\n", + "| time_elapsed | 94 |\n", "| total_timesteps | 22528 |\n", "| train/ | |\n", "| approx_kl | 0.001861603 |\n", @@ -1024,9 +1025,9 @@ "| ep_len_mean | 177 |\n", "| ep_rew_mean | 177 |\n", "| time/ | |\n", - "| fps | 336 |\n", + "| fps | 237 |\n", "| iterations | 12 |\n", - "| time_elapsed | 72 |\n", + "| time_elapsed | 103 |\n", "| total_timesteps | 24576 |\n", "| train/ | |\n", "| approx_kl | 0.004732498 |\n", @@ -1045,9 +1046,9 @@ "| ep_len_mean | 198 |\n", "| ep_rew_mean | 198 |\n", "| time/ | |\n", - "| fps | 331 |\n", + "| fps | 235 |\n", "| iterations | 13 |\n", - "| time_elapsed | 80 |\n", + "| time_elapsed | 112 |\n", "| total_timesteps | 26624 |\n", "| train/ | |\n", "| approx_kl | 0.004822414 |\n", @@ -1066,9 +1067,9 @@ "| ep_len_mean | 211 |\n", "| ep_rew_mean | 211 |\n", "| time/ | |\n", - "| fps | 331 |\n", + "| fps | 235 |\n", "| iterations | 14 |\n", - "| time_elapsed | 86 |\n", + "| time_elapsed | 121 |\n", "| total_timesteps | 28672 |\n", "| train/ | |\n", "| approx_kl | 0.00271593 |\n", @@ -1087,9 +1088,9 @@ "| ep_len_mean | 228 |\n", "| ep_rew_mean | 228 |\n", "| time/ | |\n", - "| fps | 330 |\n", + "| fps | 230 |\n", "| iterations | 15 |\n", - "| time_elapsed | 92 |\n", + "| time_elapsed | 133 |\n", "| total_timesteps | 30720 |\n", "| train/ | |\n", "| approx_kl | 0.0125599485 |\n", @@ -1108,9 +1109,9 @@ "| ep_len_mean | 247 |\n", "| ep_rew_mean | 247 |\n", "| time/ | |\n", - "| fps | 329 |\n", + "| fps | 228 |\n", "| iterations | 16 |\n", - "| time_elapsed | 99 |\n", + "| time_elapsed | 143 |\n", "| total_timesteps | 32768 |\n", "| train/ | |\n", "| approx_kl | 0.0008869 |\n", @@ -1129,9 +1130,9 @@ "| ep_len_mean | 266 |\n", "| ep_rew_mean | 266 |\n", "| time/ | |\n", - "| fps | 327 |\n", + "| fps | 215 |\n", "| iterations | 17 |\n", - "| time_elapsed | 106 |\n", + "| time_elapsed | 161 |\n", "| total_timesteps | 34816 |\n", "| train/ | |\n", "| approx_kl | 0.0046915566 |\n", @@ -1150,9 +1151,9 @@ "| ep_len_mean | 286 |\n", "| ep_rew_mean | 286 |\n", "| time/ | |\n", - "| fps | 327 |\n", + "| fps | 201 |\n", "| iterations | 18 |\n", - "| time_elapsed | 112 |\n", + "| time_elapsed | 182 |\n", "| total_timesteps | 36864 |\n", "| train/ | |\n", "| approx_kl | 0.0038050695 |\n", @@ -1171,9 +1172,9 @@ "| ep_len_mean | 303 |\n", "| ep_rew_mean | 303 |\n", "| time/ | |\n", - "| fps | 327 |\n", + "| fps | 191 |\n", "| iterations | 19 |\n", - "| time_elapsed | 118 |\n", + "| time_elapsed | 203 |\n", "| total_timesteps | 38912 |\n", "| train/ | |\n", "| approx_kl | 0.00042699254 |\n", @@ -1192,9 +1193,9 @@ "| ep_len_mean | 316 |\n", "| ep_rew_mean | 316 |\n", "| time/ | |\n", - "| fps | 326 |\n", + "| fps | 184 |\n", "| iterations | 20 |\n", - "| time_elapsed | 125 |\n", + "| time_elapsed | 222 |\n", "| total_timesteps | 40960 |\n", "| train/ | |\n", "| approx_kl | 0.004356214 |\n", @@ -1316,6 +1317,494 @@ "source": [ "plot_results(log_dir)" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Customizando a Rede Neural\n", + "\n", + "Se quisermos mais controle a respeito da arquitetura do nosso modelo, podemos modificar o parâmetro `policy_kwargs` para customizar a nossa rede neural. Por exemplo, podemos alterar:\n", + "\n", + " - `activation_fn`: a função de ativação da rede, como `torch.nn.Tanh` ou `torch.nn.ReLU`.\n", + " - `net_arch`: a quantidade de camadas e neurônios da rede. Um Actor-Critic com duas redes de duas camadas de 32 neurônios teria uma arquitetura `[dict(pi=[32, 32], vf=[32, 32])]`, por exemplo." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Using cuda device\n", + "Wrapping the env in a DummyVecEnv.\n", + "-----------------------------------------\n", + "| rollout/ | |\n", + "| ep_len_mean | 23.5 |\n", + "| ep_rew_mean | 23.5 |\n", + "| time/ | |\n", + "| fps | 714 |\n", + "| iterations | 1 |\n", + "| time_elapsed | 2 |\n", + "| total_timesteps | 2048 |\n", + "| train/ | |\n", + "| approx_kl | 0.013256451 |\n", + "| clip_fraction | 0.0469 |\n", + "| clip_range | 0.2 |\n", + "| entropy_loss | -0.55 |\n", + "| explained_variance | 0.964 |\n", + "| learning_rate | 0.0003 |\n", + "| loss | 1.88 |\n", + "| n_updates | 130 |\n", + "| policy_gradient_loss | -0.00662 |\n", + "| value_loss | 5.6 |\n", + "-----------------------------------------\n", + "-----------------------------------------\n", + "| rollout/ | |\n", + "| ep_len_mean | 29.1 |\n", + "| ep_rew_mean | 29.1 |\n", + "| time/ | |\n", + "| fps | 193 |\n", + "| iterations | 2 |\n", + "| time_elapsed | 21 |\n", + "| total_timesteps | 4096 |\n", + "| train/ | |\n", + "| approx_kl | 0.008292552 |\n", + "| clip_fraction | 0.109 |\n", + "| clip_range | 0.2 |\n", + "| entropy_loss | -0.689 |\n", + "| explained_variance | -646 |\n", + "| learning_rate | 0.0003 |\n", + "| loss | 35.8 |\n", + "| n_updates | 10 |\n", + "| policy_gradient_loss | -0.0109 |\n", + "| value_loss | 82.6 |\n", + "-----------------------------------------\n", + "-----------------------------------------\n", + "| rollout/ | |\n", + "| ep_len_mean | 35 |\n", + "| ep_rew_mean | 35 |\n", + "| time/ | |\n", + "| fps | 198 |\n", + "| iterations | 3 |\n", + "| time_elapsed | 30 |\n", + "| total_timesteps | 6144 |\n", + "| train/ | |\n", + "| approx_kl | 0.004975099 |\n", + "| clip_fraction | 0.0312 |\n", + "| clip_range | 0.2 |\n", + "| entropy_loss | -0.673 |\n", + "| explained_variance | -62.5 |\n", + "| learning_rate | 0.0003 |\n", + "| loss | 28.5 |\n", + "| n_updates | 20 |\n", + "| policy_gradient_loss | -0.012 |\n", + "| value_loss | 81 |\n", + "-----------------------------------------\n", + "-----------------------------------------\n", + "| rollout/ | |\n", + "| ep_len_mean | 45.8 |\n", + "| ep_rew_mean | 45.8 |\n", + "| time/ | |\n", + "| fps | 196 |\n", + "| iterations | 4 |\n", + "| time_elapsed | 41 |\n", + "| total_timesteps | 8192 |\n", + "| train/ | |\n", + "| approx_kl | 0.008337243 |\n", + "| clip_fraction | 0.0625 |\n", + "| clip_range | 0.2 |\n", + "| entropy_loss | -0.654 |\n", + "| explained_variance | -21.1 |\n", + "| learning_rate | 0.0003 |\n", + "| loss | 18.5 |\n", + "| n_updates | 30 |\n", + "| policy_gradient_loss | -0.0134 |\n", + "| value_loss | 62.9 |\n", + "-----------------------------------------\n", + "-----------------------------------------\n", + "| rollout/ | |\n", + "| ep_len_mean | 57.3 |\n", + "| ep_rew_mean | 57.3 |\n", + "| time/ | |\n", + "| fps | 197 |\n", + "| iterations | 5 |\n", + "| time_elapsed | 51 |\n", + "| total_timesteps | 10240 |\n", + "| train/ | |\n", + "| approx_kl | 0.004784454 |\n", + "| clip_fraction | 0.0469 |\n", + "| clip_range | 0.2 |\n", + "| entropy_loss | -0.636 |\n", + "| explained_variance | -8.07 |\n", + "| learning_rate | 0.0003 |\n", + "| loss | 34.4 |\n", + "| n_updates | 40 |\n", + "| policy_gradient_loss | -0.00848 |\n", + "| value_loss | 81.2 |\n", + "-----------------------------------------\n", + "-----------------------------------------\n", + "| rollout/ | |\n", + "| ep_len_mean | 73.6 |\n", + "| ep_rew_mean | 73.6 |\n", + "| time/ | |\n", + "| fps | 202 |\n", + "| iterations | 6 |\n", + "| time_elapsed | 60 |\n", + "| total_timesteps | 12288 |\n", + "| train/ | |\n", + "| approx_kl | 0.004643734 |\n", + "| clip_fraction | 0.0469 |\n", + "| clip_range | 0.2 |\n", + "| entropy_loss | -0.616 |\n", + "| explained_variance | -11.1 |\n", + "| learning_rate | 0.0003 |\n", + "| loss | 40.2 |\n", + "| n_updates | 50 |\n", + "| policy_gradient_loss | -0.00883 |\n", + "| value_loss | 85.6 |\n", + "-----------------------------------------\n", + "------------------------------------------\n", + "| rollout/ | |\n", + "| ep_len_mean | 89.5 |\n", + "| ep_rew_mean | 89.5 |\n", + "| time/ | |\n", + "| fps | 205 |\n", + "| iterations | 7 |\n", + "| time_elapsed | 69 |\n", + "| total_timesteps | 14336 |\n", + "| train/ | |\n", + "| approx_kl | 0.0027733727 |\n", + "| clip_fraction | 0.0469 |\n", + "| clip_range | 0.2 |\n", + "| entropy_loss | -0.601 |\n", + "| explained_variance | -46.5 |\n", + "| learning_rate | 0.0003 |\n", + "| loss | 23.2 |\n", + "| n_updates | 60 |\n", + "| policy_gradient_loss | -0.00713 |\n", + "| value_loss | 75.6 |\n", + "------------------------------------------\n", + "-----------------------------------------\n", + "| rollout/ | |\n", + "| ep_len_mean | 105 |\n", + "| ep_rew_mean | 105 |\n", + "| time/ | |\n", + "| fps | 203 |\n", + "| iterations | 8 |\n", + "| time_elapsed | 80 |\n", + "| total_timesteps | 16384 |\n", + "| train/ | |\n", + "| approx_kl | 0.004247589 |\n", + "| clip_fraction | 0.0312 |\n", + "| clip_range | 0.2 |\n", + "| entropy_loss | -0.587 |\n", + "| explained_variance | -15 |\n", + "| learning_rate | 0.0003 |\n", + "| loss | 40.3 |\n", + "| n_updates | 70 |\n", + "| policy_gradient_loss | -0.00532 |\n", + "| value_loss | 76.8 |\n", + "-----------------------------------------\n", + "------------------------------------------\n", + "| rollout/ | |\n", + "| ep_len_mean | 124 |\n", + "| ep_rew_mean | 124 |\n", + "| time/ | |\n", + "| fps | 201 |\n", + "| iterations | 9 |\n", + "| time_elapsed | 91 |\n", + "| total_timesteps | 18432 |\n", + "| train/ | |\n", + "| approx_kl | 0.0035243833 |\n", + "| clip_fraction | 0.0469 |\n", + "| clip_range | 0.2 |\n", + "| entropy_loss | -0.585 |\n", + "| explained_variance | -1.86 |\n", + "| learning_rate | 0.0003 |\n", + "| loss | 22.2 |\n", + "| n_updates | 80 |\n", + "| policy_gradient_loss | -0.00621 |\n", + "| value_loss | 49.4 |\n", + "------------------------------------------\n", + "------------------------------------------\n", + "| rollout/ | |\n", + "| ep_len_mean | 141 |\n", + "| ep_rew_mean | 141 |\n", + "| time/ | |\n", + "| fps | 200 |\n", + "| iterations | 10 |\n", + "| time_elapsed | 102 |\n", + "| total_timesteps | 20480 |\n", + "| train/ | |\n", + "| approx_kl | 0.0044500786 |\n", + "| clip_fraction | 0.0469 |\n", + "| clip_range | 0.2 |\n", + "| entropy_loss | -0.572 |\n", + "| explained_variance | -1.26 |\n", + "| learning_rate | 0.0003 |\n", + "| loss | 5.13 |\n", + "| n_updates | 90 |\n", + "| policy_gradient_loss | -0.0044 |\n", + "| value_loss | 52.7 |\n", + "------------------------------------------\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "------------------------------------------\n", + "| rollout/ | |\n", + "| ep_len_mean | 156 |\n", + "| ep_rew_mean | 156 |\n", + "| time/ | |\n", + "| fps | 201 |\n", + "| iterations | 11 |\n", + "| time_elapsed | 111 |\n", + "| total_timesteps | 22528 |\n", + "| train/ | |\n", + "| approx_kl | 0.0073240334 |\n", + "| clip_fraction | 0.125 |\n", + "| clip_range | 0.2 |\n", + "| entropy_loss | -0.553 |\n", + "| explained_variance | 0.593 |\n", + "| learning_rate | 0.0003 |\n", + "| loss | 14.4 |\n", + "| n_updates | 100 |\n", + "| policy_gradient_loss | -0.00638 |\n", + "| value_loss | 40.3 |\n", + "------------------------------------------\n", + "-----------------------------------------\n", + "| rollout/ | |\n", + "| ep_len_mean | 169 |\n", + "| ep_rew_mean | 169 |\n", + "| time/ | |\n", + "| fps | 202 |\n", + "| iterations | 12 |\n", + "| time_elapsed | 121 |\n", + "| total_timesteps | 24576 |\n", + "| train/ | |\n", + "| approx_kl | 0.007270371 |\n", + "| clip_fraction | 0 |\n", + "| clip_range | 0.2 |\n", + "| entropy_loss | -0.557 |\n", + "| explained_variance | 0.678 |\n", + "| learning_rate | 0.0003 |\n", + "| loss | 6.95 |\n", + "| n_updates | 110 |\n", + "| policy_gradient_loss | -0.00651 |\n", + "| value_loss | 22.2 |\n", + "-----------------------------------------\n", + "------------------------------------------\n", + "| rollout/ | |\n", + "| ep_len_mean | 187 |\n", + "| ep_rew_mean | 187 |\n", + "| time/ | |\n", + "| fps | 203 |\n", + "| iterations | 13 |\n", + "| time_elapsed | 130 |\n", + "| total_timesteps | 26624 |\n", + "| train/ | |\n", + "| approx_kl | 0.0070879953 |\n", + "| clip_fraction | 0.0312 |\n", + "| clip_range | 0.2 |\n", + "| entropy_loss | -0.566 |\n", + "| explained_variance | 0.889 |\n", + "| learning_rate | 0.0003 |\n", + "| loss | 2.97 |\n", + "| n_updates | 120 |\n", + "| policy_gradient_loss | -0.004 |\n", + "| value_loss | 12.1 |\n", + "------------------------------------------\n", + "-----------------------------------------\n", + "| rollout/ | |\n", + "| ep_len_mean | 206 |\n", + "| ep_rew_mean | 206 |\n", + "| time/ | |\n", + "| fps | 202 |\n", + "| iterations | 14 |\n", + "| time_elapsed | 141 |\n", + "| total_timesteps | 28672 |\n", + "| train/ | |\n", + "| approx_kl | 0.013256451 |\n", + "| clip_fraction | 0.0469 |\n", + "| clip_range | 0.2 |\n", + "| entropy_loss | -0.55 |\n", + "| explained_variance | 0.964 |\n", + "| learning_rate | 0.0003 |\n", + "| loss | 1.88 |\n", + "| n_updates | 130 |\n", + "| policy_gradient_loss | -0.00662 |\n", + "| value_loss | 5.6 |\n", + "-----------------------------------------\n", + "-------------------------------------------\n", + "| rollout/ | |\n", + "| ep_len_mean | 221 |\n", + "| ep_rew_mean | 221 |\n", + "| time/ | |\n", + "| fps | 203 |\n", + "| iterations | 15 |\n", + "| time_elapsed | 150 |\n", + "| total_timesteps | 30720 |\n", + "| train/ | |\n", + "| approx_kl | 0.00036805522 |\n", + "| clip_fraction | 0 |\n", + "| clip_range | 0.2 |\n", + "| entropy_loss | -0.552 |\n", + "| explained_variance | 0.839 |\n", + "| learning_rate | 0.0003 |\n", + "| loss | 20.3 |\n", + "| n_updates | 140 |\n", + "| policy_gradient_loss | -0.00217 |\n", + "| value_loss | 34.2 |\n", + "-------------------------------------------\n", + "-----------------------------------------\n", + "| rollout/ | |\n", + "| ep_len_mean | 236 |\n", + "| ep_rew_mean | 236 |\n", + "| time/ | |\n", + "| fps | 202 |\n", + "| iterations | 16 |\n", + "| time_elapsed | 161 |\n", + "| total_timesteps | 32768 |\n", + "| train/ | |\n", + "| approx_kl | 0.008415006 |\n", + "| clip_fraction | 0 |\n", + "| clip_range | 0.2 |\n", + "| entropy_loss | -0.547 |\n", + "| explained_variance | 0.957 |\n", + "| learning_rate | 0.0003 |\n", + "| loss | 1.37 |\n", + "| n_updates | 150 |\n", + "| policy_gradient_loss | -0.00258 |\n", + "| value_loss | 9.3 |\n", + "-----------------------------------------\n", + "------------------------------------------\n", + "| rollout/ | |\n", + "| ep_len_mean | 252 |\n", + "| ep_rew_mean | 252 |\n", + "| time/ | |\n", + "| fps | 203 |\n", + "| iterations | 17 |\n", + "| time_elapsed | 171 |\n", + "| total_timesteps | 34816 |\n", + "| train/ | |\n", + "| approx_kl | 0.0058589326 |\n", + "| clip_fraction | 0.109 |\n", + "| clip_range | 0.2 |\n", + "| entropy_loss | -0.54 |\n", + "| explained_variance | 0.392 |\n", + "| learning_rate | 0.0003 |\n", + "| loss | 34.7 |\n", + "| n_updates | 160 |\n", + "| policy_gradient_loss | -0.00343 |\n", + "| value_loss | 60 |\n", + "------------------------------------------\n", + "-----------------------------------------\n", + "| rollout/ | |\n", + "| ep_len_mean | 268 |\n", + "| ep_rew_mean | 268 |\n", + "| time/ | |\n", + "| fps | 202 |\n", + "| iterations | 18 |\n", + "| time_elapsed | 181 |\n", + "| total_timesteps | 36864 |\n", + "| train/ | |\n", + "| approx_kl | 0.012877971 |\n", + "| clip_fraction | 0.156 |\n", + "| clip_range | 0.2 |\n", + "| entropy_loss | -0.546 |\n", + "| explained_variance | 0.843 |\n", + "| learning_rate | 0.0003 |\n", + "| loss | 3.36 |\n", + "| n_updates | 170 |\n", + "| policy_gradient_loss | -0.0076 |\n", + "| value_loss | 54.2 |\n", + "-----------------------------------------\n", + "------------------------------------------\n", + "| rollout/ | |\n", + "| ep_len_mean | 285 |\n", + "| ep_rew_mean | 285 |\n", + "| time/ | |\n", + "| fps | 201 |\n", + "| iterations | 19 |\n", + "| time_elapsed | 192 |\n", + "| total_timesteps | 38912 |\n", + "| train/ | |\n", + "| approx_kl | 0.0015262581 |\n", + "| clip_fraction | 0.0312 |\n", + "| clip_range | 0.2 |\n", + "| entropy_loss | -0.558 |\n", + "| explained_variance | 0.57 |\n", + "| learning_rate | 0.0003 |\n", + "| loss | 15.4 |\n", + "| n_updates | 180 |\n", + "| policy_gradient_loss | -0.00223 |\n", + "| value_loss | 72.8 |\n", + "------------------------------------------\n", + "-----------------------------------------\n", + "| rollout/ | |\n", + "| ep_len_mean | 300 |\n", + "| ep_rew_mean | 300 |\n", + "| time/ | |\n", + "| fps | 203 |\n", + "| iterations | 20 |\n", + "| time_elapsed | 201 |\n", + "| total_timesteps | 40960 |\n", + "| train/ | |\n", + "| approx_kl | 0.008065609 |\n", + "| clip_fraction | 0.109 |\n", + "| clip_range | 0.2 |\n", + "| entropy_loss | -0.535 |\n", + "| explained_variance | -0.85 |\n", + "| learning_rate | 0.0003 |\n", + "| loss | 57.8 |\n", + "| n_updates | 190 |\n", + "| policy_gradient_loss | -0.00569 |\n", + "| value_loss | 97.6 |\n", + "-----------------------------------------\n" + ] + } + ], + "source": [ + "import torch\n", + "\n", + "# Cria o ambiente com o wrapper Monitor\n", + "env = Monitor(gym.make('CartPole-v1'), log_dir)\n", + "\n", + "# Parâmetros das redes neurais\n", + "policy_kwargs = dict(activation_fn=torch.nn.ReLU, # Troca a função de ativação para ReLU\n", + " net_arch=[dict(pi=[32, 32], vf=[32, 32])]) # Define a arquitetura das redes do Actor-Critic\n", + "\n", + "# Cria o nosso modelo com os novos parâmetros\n", + "model = PPO('MlpPolicy', env, seed=1, verbose=1, policy_kwargs=policy_kwargs).learn(total_timesteps=40000)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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rGDlypXMmzePgQMHsnv3bvr06XM2OTt9+jTz58+nS5cujBgxgpIlS7Js2TKWLVvG8OHD2bZtmx8/MRHJrQbN28SizQcYNG+TX8v64zpf6vDXcX/cMz11+FomK953Vn62/owvKwW6y/Jq59wuM6sAzDWzDamUTW4UuLvggHPDgGEA4eHhF5xP6oknfmDFin3piTdNjRpV4IMP2qZZrkGDBkRFRfH111/TpUuXc87NmTOHadOm8c477wCemaHbt29n0aJFPP7442evb9CgQbJ1Dx48mMmTJwOwY8cONm/eTNmyZS8oFxISwjXXXMP48eOJjY09Z5zY4sWLue222wgJCaFixYpcd911LFu2jM6dO/P4449z6tQpvv/+e6699loKFy7MnDlzWLVqFRMnTgTg6NGjbN68mdq1a6f9oYlInjagXe1zfvqrrD+u86UOfx33xz3TU4evZbLifWflZ+vP+LJSQBMy59wu7899ZjYZaA7sNbNKzrnd3i7JxIxpJ1A1yeVVgF2BjC/Qbr75Zp5++mkWLlx4TiuWc45vv/2WOnXqXHBNWrMTFy5cyLx581iyZAlFihShdevWqS4v0adPH7p3784rr7xyzvGkg/2TKlSoEK1bt2b27NmMHz/+bFerc44hQ4bQsWPHc8r7e3amiOQ+TS8uzah7fRsSnJ6y/rjOlzr8ddwf90xPHb6WyYr3nZWfrT/jy0oBS8jMrCiQzzn3l/d5B+A1YBpwF/A/78+p3kumAY+a2Tg8g/mPJnZtZpQvLVmBdM8991CyZEnq16/PwoULzx7v2LEjQ4YMYciQIZgZv//+O40bN+baa69lzJgxtGnThjVr1rBq1aoL6jx69CilS5emSJEibNiwgV9//TXVGFq1asXzzz9/zhg2gGuvvZahQ4dy1113cejQIRYtWsTbb78NeJK4zz77jIiICEaOHHk25k8++YS2bdtSoEABNm3alOxEBREREUm/QLaQVQQme1t88gNjnXPfm9ky4BszuxfYDtziLT8T6AJsAU4A/QMYW5aoUqUKAwYMuOD4//3f//HEE0/QoEEDnHNUr16d6dOn849//IP+/fvToEEDGjVqRPPmzS+4tlOnTnz66ac0aNCAOnXq0LJly1RjMDOefvrpC453796dJUuW0LBhQ8yMt956i4suugiADh060K9fP26++WZCQ0MBuO+++4iK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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_results(log_dir)" + ] } ], "metadata": {