def _d2_actv()

in crlapi/sl/architectures/firefly_vgg/sp/module.py [0:0]


    def _d2_actv(self, x, beta=3.):
        if self.actv_fn == 'relu':
            # use 2nd order derivative of softplus for approximation
            s = torch.sigmoid(x*beta)
            return beta*s*(1.-s)
        elif self.actv_fn == 'softplus':
            s = torch.sigmoid(x)
            return s*(1.-s)
        elif self.actv_fn == 'rbf':
            return (x.pow(2)-1)*(-x.pow(2)/2).exp()
        elif self.actv_fn == 'leaky_relu':
            s = torch.sigmoid(x*beta)
            return beta*s*(1.-s)*(1.-self.leaky_alpha)
        elif self.actv_fn == 'swish':
            s = torch.sigmoid(x)
            return s*(1.-s) + s + x*s*(1.-s) - (s.pow(2) + 2.*x*s.pow(2)*(1.-s))
        elif self.actv_fn == 'sigmoid':
            s = torch.sigmoid(x)
            return (s-s.pow(2)) * (1.-s).pow(2)
        elif self.actv_fn == 'tanh':
            h = torch.tanh(x)
            return -2.*h * (1-h.pow(2))
        elif self.actv_fn == 'none':
            return torch.ones_like(x)
        else:
            raise NotImplementedError