Why are you calculating log probability of a contiguous action, this way? Direcly log ?? 
    def action(self, state):
        state = torch.from_numpy(state).float().unsqueeze(0)
        actions = self.__call__(state)
        log_prob = torch.log(actions.squeeze(0))
        return actions, log_prob

I think there are probably many more problems in your code, and I suggest you read others implementations before continuing.
Hint: inorder to let a policy gradient method (REINFORCE, A2C, PPO…) produce a contiguous action and optimize its log probability, you need reparameterization.