From deab7043fce2e708b786a1d81b4799e3786a743e Mon Sep 17 00:00:00 2001 From: Mike Clark Date: Sat, 4 Nov 2017 16:24:54 +0800 Subject: [PATCH] add eps to avoid NaN I tracked some NaN's I was getting down to here. It happens when std is a small number, then var is even smaller, and log_density=inf. There are some problems where the agent will learn to use small standard deviations because jittering movements have a high cost, this makes those more stable. --- network/continuous_action_network.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/network/continuous_action_network.py b/network/continuous_action_network.py index a77281c..d900094 100644 --- a/network/continuous_action_network.py +++ b/network/continuous_action_network.py @@ -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):