Пример #1
0
    def __init__(self, x_dim, h_dim, t_dim):
        super(VAE_BKDG, self).__init__()

        self.x_dim = x_dim
        self.h_dim = h_dim
        self.t_dim = t_dim
        d_dim = int(x_dim/t_dim)
        self.d_dim = d_dim
        l_dim = int(d_dim * (d_dim+1)/2)
        self.l_dim = l_dim
        z_dim = t_dim * l_dim
        self.z_dim = z_dim

        # feature
        self.fc0 = nn.Linear(x_dim, h_dim)
        self.fc1 = nn.Linear(h_dim, h_dim)
        # encode
        self.fc21 = nn.Linear(h_dim, z_dim)
        self.fc22 = nn.Linear(h_dim, int(t_dim*(t_dim+1)/2))
        # transform
        self.fc2 = nn.Linear(z_dim, h_dim)
        self.fc3 = nn.Linear(h_dim, h_dim)
        # decode
        self.fc41 = nn.Linear(h_dim, x_dim)
        self.fc42 = nn.Linear(h_dim, x_dim)

        self.relu = nn.ReLU()
        self.sigmoid = nn.Sigmoid()
        self.tanh = nn.Tanh()

        t = torch.linspace(0,2,steps=t_dim+1); t = t[1:]
        self.K = Variable(torch.exp(-torch.pow(t.unsqueeze(1)-t.unsqueeze(0),2)/2/2) + 1e-4*torch.eye(t_dim))
        self.Kh = torch.potrf(self.K)
        self.iK = torch.potri(self.Kh)
Пример #2
0
    def __init__(self, x_dim, h_dim, z_dim):
        super(VAE, self).__init__()

        self.x_dim = x_dim  # ND
        self.h_dim = h_dim
        self.z_dim = z_dim  # ND^*
        self.t_dim = np.int(x_dim / (2 * z_dim / x_dim - 1))  # N
        # feature
        self.fc0 = nn.Linear(x_dim, h_dim)
        # encode
        self.fc21 = nn.Linear(h_dim, z_dim)
        self.fc22 = nn.Linear(h_dim, np.int(self.t_dim * (self.t_dim + 1) / 2))
        #         self.fc23 = nn.Linear(h_dim, z_dim)
        # transform
        self.fc3 = nn.Linear(z_dim, h_dim)
        # decode
        self.fc41 = nn.Linear(h_dim, x_dim)
        self.fc42 = nn.Linear(h_dim, x_dim)

        self.relu = nn.ReLU()
        self.sigmoid = nn.Sigmoid()
        self.tanh = nn.Tanh()

        # problem-specific parameters
        self.D = np.int(self.z_dim / self.x_dim * 2 - 1)
        self.N = np.int(self.x_dim / self.D)
        # GP kernel
        t = torch.linspace(0, 2, steps=self.N + 1)
        t = t[1:]
        self.K = Variable(
            torch.exp(-torch.pow(t.unsqueeze(1) - t.unsqueeze(0), 2) / 2 / 2) +
            1e-4 * torch.eye(self.N))
        self.Kh = torch.potrf(self.K)
        #         self.iK = Variable(torch.inverse(self.K.data))
        self.iK = torch.potri(self.Kh)
Пример #3
0
    def __init__(self, x_dim, h_dim, t_dim):
        super(VGP, self).__init__()

        self.x_dim = x_dim
        self.h_dim = h_dim
        self.t_dim = t_dim
        d_dim = int(x_dim / t_dim)
        self.d_dim = d_dim
        d2h_dim = int(d_dim * (d_dim + 1) / 2)
        self.d2h_dim = d2h_dim
        z_dim = t_dim * d2h_dim
        self.z_dim = z_dim
        # source-target dimensions of GP draws
        f_in = 20
        self.f_in = f_in
        f_out = 100
        self.f_out = f_out

        # encode 1: x -> s,t (variational data)
        self.fc1 = nn.Linear(x_dim, h_dim)
        self.fc11 = nn.Linear(h_dim, f_in)
        self.fc12 = nn.Linear(h_dim, f_out)

        # encode 2: f -> z
        self.fc2 = nn.Linear(f_out, h_dim)
        self.fc21 = nn.Linear(h_dim, z_dim)
        self.fc22 = nn.Linear(h_dim, int(t_dim * (t_dim + 1) / 2))

        # encode 3: x, z -> r
        self.fc3 = nn.Linear(x_dim + z_dim, h_dim)
        self.fc31 = nn.Linear(h_dim, f_in + f_out)
        self.fc32 = nn.Linear(h_dim, f_in + f_out)

        # decode: z -> x
        self.fc4 = nn.Linear(z_dim, h_dim)
        self.fc41 = nn.Linear(h_dim, x_dim)
        self.fc42 = nn.Linear(h_dim, x_dim)

        self.relu = nn.ReLU()
        self.sigmoid = nn.Sigmoid()
        self.tanh = nn.Tanh()

        # GP kernel
        t = torch.linspace(0, 2, steps=t_dim + 1)
        t = t[1:]
        self.K = Variable(
            torch.exp(-torch.pow(t.unsqueeze(1) - t.unsqueeze(0), 2) / 2 / 2) +
            1e-4 * torch.eye(t_dim))
        self.Kh = torch.potrf(self.K)
        #         self.iK = Variable(torch.inverse(self.K.data))
        self.iK = torch.potri(self.Kh)
Пример #4
0
    def estep(self, data):
        """
        Compute log observation probabilities under GMM.
        Args:
            data: N x D tensor of points

        Returns:
            logobs: N x K tensor of log probabilities (for each point on each
                    cluster)

        """
        # Constants
        N, D = data.shape
        K = self._sigma.shape[0]

        logobs = -0.5 * ptu.ones((N, K)) * D * np.log(2*np.pi)  # Constant
        for i in range(K):
            mu, sigma = self._mu[i], self._sigma[i]
            L = torch.potri(sigma, upper=False)  # Cholesky decomposition
            logobs[:, i] -= torch.sum(torch.log(torch.))
Пример #5
0
def potri_compat(var):
    return Variable(torch.potri(
        var.data)) if torch.__version__ < '0.3.0' else torch.potri(var)
Пример #6
0
def psd_inv(mat):
  u = T.cholesky(mat, upper=False)
  return T.potri(u, upper=False)
Пример #7
0
 def _get_precision(self):
     if self._l is None:
         self._get_chol()
     self._precision = Variable(torch.potri(self._l.data))