found NaN's for small std

This commit is contained in:
wassname
2017-11-04 17:05:13 +08:00
parent a565202d4a
commit 79311f02e6
2 changed files with 6 additions and 1 deletions
+5
View File
@@ -155,6 +155,11 @@ class ProximalPolicyOptimization:
probs_old = actor_net.log_density(actions, mean_old, log_std_old, std_old)
mean, std, log_std = actor_net.predict(states)
probs = actor_net.log_density(actions, mean, log_std, std)
# avoid NaNs with small std I going to clamp this - mike
probs_old = probs_old.clamp(-10,20)
probs = probs.clamp(-10,20)
ratio = (probs - probs_old).exp()
obj = ratio * advantages
obj_clipped = ratio.clamp(1.0 - self.config.ppo_ratio_clip, 1.0 + self.config.ppo_ratio_clip) * advantages
+1 -1
View File
@@ -154,7 +154,7 @@ class GaussianActorNet(nn.Module, BasicNet):
def log_density(self, x, mean, log_std, std):
var = std.pow(2)
log_density = -(x - mean).pow(2) / (2 * var) - 0.5 * torch.log(2 * Variable(torch.FloatTensor([np.pi])).expand_as(x)) - log_std
log_density = -(x - mean).pow(2) / (2 * var + 1e-5) - 0.5 * torch.log(2 * Variable(torch.FloatTensor([np.pi])).expand_as(x)) - log_std
return log_density.sum(1)
def entropy(self, std):