def forward(self, x, *args, **kwargs):
action = super(DiagonalGaussianPolicy, self).forward(x, *args, **kwargs)
size = action.raw.size()
std = self.logstd.exp().expand_as(action.raw)
value = action.raw + std * V(th.randn(size))
value = value.detach()
action.value = value
# action.logstd = self.logstd.clone()
action.logstd = self.logstd
action.prob = lambda: self._normal(value, action.raw, action.logstd)
action.entropy = action.logstd + self.halflog2pie
var = std.pow(2)
action.compute_log_prob = lambda a: (- ((a - action.raw).pow(2) / (2.0 * var)) - self.halflog2pi - action.logstd).mean(1)
action.log_prob = action.compute_log_prob(value)
return action
评论列表
文章目录