【问题标题】:Reinforcement Learning with Pytorch. [Error: KeyError ]使用 Pytorch 进行强化学习。 [错误:KeyError]
【发布时间】:2019-11-17 11:51:46
【问题描述】:

我是强化学习和 pytorch 的新手。我正在向 Udemy 学习。但是,我拥有的代码与显示的代码相同,但我遇到了错误。我猜这是一个 pytorch 错误,但无法调试它。如果有人提供帮助,我们将不胜感激。

import gym
import time
import torch
import matplotlib.pyplot as plt
from gym.envs.registration import register
register(id='FrozenLakeNotSlippery-v0',entry_point='gym.envs.toy_text:FrozenLakeEnv',kwargs={'map_name': '4x4', 'is_slippery':False})
env = gym.make('FrozenLakeNotSlippery-v0')
number_of_states = env.observation_space.n
number_of_actions = env.action_space.n
Q = torch.zeros([number_of_states,number_of_actions])
num_episodes = 1000
steps_total = []
gamma = 1
for i in range(num_episodes):
    state = env.reset()
    step = 0
    while True:
        step += 1
        #action = env.action_space.sample()
        random_values = Q[state]+torch.rand(1,number_of_actions)/1000
        action = torch.max(random_values,1)[1][0]
        new_state, reward, done, info = env.step(action)
        Q[state, action] = reward + gamma * torch.max(Q[new_state])
        state = new_state
        #time.sleep(0.4)
        #env.render()
        if done:
            steps_total.append(step)
            print ("Episode Finished after %i steps" %step)
            break

print ("Average Num Steps: %2f" %(sum(steps_total)/num_episodes))
plt.plot(steps_total)
plt.show()

我遇到的错误是以下一个

KeyError                                  Traceback (most recent call last)
<ipython-input-11-a6aa419c3767> in <module>
  8         random_values = Q[state]+torch.rand(1,number_of_actions)/1000
  9         action = torch.max(random_values,1)[1][0]
---> 10         new_state, reward, done, info = env.step(action)
 11         Q[state, action] = reward + gamma * torch.max(Q[new_state])
 12         state = new_state

c:\users\souradip\appdata\local\programs\python\python36\lib\site-packages\gym\envs\toy_text\discrete.py in step(self, a)
 53 
 54     def step(self, a):
---> 55         transitions = self.P[self.s][a]
 56         i = categorical_sample([t[0] for t in transitions], self.np_random)
 57         p, s, r, d= transitions[i]

KeyError: tensor(3)

【问题讨论】:

  • 试试a.item()
  • 谢谢,我一定会努力的。

标签: python-3.x pytorch reinforcement-learning


【解决方案1】:

以下代码

action = torch.max(random_values,1)[1][0]

导致0-dim 张量,但env.step() 需要一个python 编号,这基本上是来自动作空间的动作。因此,正如评论中提到的@a_guest,使用a.item()0-dim 张量转换为python 数字,如下所示:

new_state, reward, done, info = env.step(action.item())

【讨论】:

  • 非常感谢。我一定会尝试一下,再做一件事。是否有任何好的链接或教程提供如何为我的自定义环境编码。由于大多数链接都显示了健身房提供的环境的强化学习教程。如果我想在健身房不提供的环境中训练我的 RL 代理怎么办。就像我正在考虑使用强化学习进行入侵检测一样。所以健身房里没有那种亲切的环境。
猜你喜欢
  • 2019-12-07
  • 2018-04-05
  • 2019-03-31
  • 1970-01-01
  • 2019-11-22
  • 1970-01-01
  • 1970-01-01
  • 2022-11-10
  • 2018-11-17
相关资源
最近更新 更多