如何解决如何为神经网络提供输出以使用高斯策略方法对连续动作进行采样?
我正在尝试使用策略梯度法 REINFORCE 算法解决 openai-gym 的“LunarLanderContinuous-v2”。环境在动作空间中有 2 个连续动作,范围从 -1 到 1。在创建神经网络时,我对网络的输出部分感到困惑。
class ContinuousPolicy(nn.Module):
def __init__(self,s_size=8,h_size=16,a_size=2):
super(ContinuousPolicy,self).__init__()
self.fc1 = nn.Linear(s_size,h_size)
self.mean = nn.Linear(h_size,2)
self.std_dev = nn.Linear(h_size,2)
def forward(self,x):
x = F.relu(self.fc1(x))
mean = self.mean(x)
std_dev = torch.abs(self.std_dev(x))
Idn_Mat = torch.zeros((2,2))
Idn_Mat[np.arange(2),np.arange(2)] = std_dev
return mean,Idn_Mat
def act(self,state):
state = torch.from_numpy(state).float().unsqueeze(0).to(device)
mean,std_dev = self.forward(state)
m = Multivariatenormal(mean,std_dev)
action = m.sample().squeeze(0)
return action.cpu().detach().numpy(),m.log_prob(action)
我假设输出给出了均值和 std_dev,以便我们将数据传递给 Multivariatenormal distribution 以分别对每个动作的输出进行采样。
PS: 我也对多元正态分布要传递的标准差的单位矩阵有疑问
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。