pytorch中dqn的动作选择



我是DQN的新手,试图理解它的编码。我正在尝试下面的代码作为epsilon贪婪动作选择,但我不确定它是如何工作的

 
if sample > eps_threshold:
with torch.no_grad():
# t.max(1) will return largest      column value of each row.
# second column on max result is index of where max element was
# found, so we pick action with the larger expected reward.
return policy_net(state).max(1)[1].view(1, 1)
else:
return   torch.tensor([[random.randrange(n_actions)]], device=device, dtype=torch.long)

你能告诉我max(1)[1]中的索引是什么吗? view(1,1)和它的索引是什么?还有为什么使用" with torch.no_grad(): "

当你训练一个模型时,torch必须将计算输出所涉及的所有张量存储到一个图中,然后能够在训练期间进行反向传递;这在计算上是很昂贵的,考虑到在选择动作之后你不需要训练网络,因为你唯一的目标是使用当前的权重来选择一个,那么使用torch.no_grad()更好。请注意,没有这部分代码仍然会以相同的方式工作,可能只是慢一点。

关于max(1)[1]部分,我不太确定输入和输出是如何考虑到这里只有一小部分代码,但我猜模型将数据作为输入批次并为每个动作输出q值;然后,对于每一个输出,你必须采取给你最高值的行动,所以你基本上需要在每一行有一个max,这是通过指定为轴(或dim作为火炬调用它)第一个来完成的,它代表列(在每一行你采取相应列的最大值,这是在这种情况下的行动)。

相关内容

  • 没有找到相关文章

最新更新