问题描述
我正在尝试使用策略梯度法 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 (将#修改为@)