python类gaussian()的实例源码

adgm.py 文件源码 项目:adgm 作者: musyoku 项目源码 文件源码 阅读 25 收藏 0 点赞 0 评论 0
def encode_x_y_distribution(self, x, test=False, softmax=True):
        x = self.to_variable(x)
        mean, ln_var = self.q_a_x(x, test=test)
        a = F.gaussian(mean, ln_var)
        y = self.q_y_ax(a, x, test=test)
        if softmax:
            return F.softmax(y)
        return y
adgm.py 文件源码 项目:adgm 作者: musyoku 项目源码 文件源码 阅读 25 收藏 0 点赞 0 评论 0
def sample_x_y_gumbel(self, x, temperature=10, test=False):
        x = self.to_variable(x)
        mean, ln_var = self.q_a_x(x, test=test)
        a = F.gaussian(mean, ln_var)
        return self.sample_ax_y_gumbel(a, x, temperature=temperature, test=test)
adgm.py 文件源码 项目:adgm 作者: musyoku 项目源码 文件源码 阅读 52 收藏 0 点赞 0 评论 0
def sample_x_label(self, x, argmax=True, test=False):
        x = self.to_variable(x)
        mean, ln_var = self.q_a_x(x, test=test)
        a = F.gaussian(mean, ln_var)
        return self.sample_ax_label(a, x, argmax=argmax, test=test)
adgm.py 文件源码 项目:adgm 作者: musyoku 项目源码 文件源码 阅读 24 收藏 0 点赞 0 评论 0
def decode_xyz_a(self, x, y, z, test=False):
        x = self.to_variable(x)
        y = self.to_variable(y)
        z = self.to_variable(z)
        mean, ln_var = self.p_a_xyz(x, y, z, test=test)
        return F.gaussian(mean, ln_var)
adgm.py 文件源码 项目:adgm 作者: musyoku 项目源码 文件源码 阅读 23 收藏 0 点赞 0 评论 0
def decode_yz_a(self, y, z, test=False):
        y = self.to_variable(y)
        z = self.to_variable(z)
        mean, ln_var = self.p_a_yz(y, z, test=test)
        return F.gaussian(mean, ln_var)
vae_m2.py 文件源码 项目:variational-autoencoder 作者: musyoku 项目源码 文件源码 阅读 21 收藏 0 点赞 0 评论 0
def __init__(self):
        self.image_width = 28
        self.image_height = 28
        self.ndim_x = 28 * 28
        self.ndim_y = 10
        self.ndim_z = 50

        # True : y = f(BN(Wx + b))
        # False: y = f(W*BN(x) + b)
        self.batchnorm_before_activation = True

        # gaussianmarg | gaussian
        self.type_pz = "gaussianmarg"
        self.type_qz = "gaussianmarg"

        self.encoder_xy_z_hidden_units = [500]
        self.encoder_xy_z_activation_function = "softplus"
        self.encoder_xy_z_apply_dropout = False
        self.encoder_xy_z_apply_batchnorm = True
        self.encoder_xy_z_apply_batchnorm_to_input = True

        self.encoder_x_y_hidden_units = [500]
        self.encoder_x_y_activation_function = "softplus"
        self.encoder_x_y_apply_dropout = False
        self.encoder_x_y_apply_batchnorm = True
        self.encoder_x_y_apply_batchnorm_to_input = True

        self.decoder_hidden_units = [500]
        self.decoder_activation_function = "softplus"
        self.decoder_apply_dropout = False
        self.decoder_apply_batchnorm = True
        self.decoder_apply_batchnorm_to_input = True

        self.gpu_enabled = True
        self.learning_rate = 0.0003
        self.gradient_momentum = 0.9
        self.gradient_clipping = 5.0
vae_m2.py 文件源码 项目:variational-autoencoder 作者: musyoku 项目源码 文件源码 阅读 21 收藏 0 点赞 0 评论 0
def log_pz(self, z, mean, ln_var, test=False):
        if self.type_pz == "gaussianmarg":
            # \int q(z)logp(z)dz = -(J/2)*log2pi - (1/2)*sum_{j=1}^{J} (mu^2 + var)
            # See Appendix B [Auto-Encoding Variational Bayes](http://arxiv.org/abs/1312.6114)
            log_pz = -0.5 * (math.log(2.0 * math.pi) + mean * mean + F.exp(ln_var))
        elif self.type_pz == "gaussian":
            log_pz = -0.5 * math.log(2.0 * math.pi) - 0.5 * z ** 2
        return F.sum(log_pz, axis=1)

    # this will not be used
vae_m2.py 文件源码 项目:variational-autoencoder 作者: musyoku 项目源码 文件源码 阅读 22 收藏 0 点赞 0 评论 0
def log_qz_xy(self, z, mean, ln_var, test=False):
        if self.type_qz == "gaussianmarg":
            # \int q(z)logq(z)dz = -(J/2)*log2pi - (1/2)*sum_{j=1}^{J} (1 + logvar)
            # See Appendix B [Auto-Encoding Variational Bayes](http://arxiv.org/abs/1312.6114)
            log_qz_xy = -0.5 * F.sum((math.log(2.0 * math.pi) + 1 + ln_var), axis=1)
        elif self.type_qz == "gaussian":
            log_qz_xy = -self.gaussian_nll_keepbatch(z, mean, ln_var)
        return log_qz_xy
vae_m2.py 文件源码 项目:variational-autoencoder 作者: musyoku 项目源码 文件源码 阅读 23 收藏 0 点赞 0 评论 0
def __call__(self, x, y, test=False, apply_f=True):
        mean, ln_var = self.forward_one_step(x, y, test=test, apply_f=apply_f)
        if apply_f:
            return F.gaussian(mean, ln_var)
        return mean, ln_var

# Network structure is same as the GaussianEncoder
vae_m2.py 文件源码 项目:variational-autoencoder 作者: musyoku 项目源码 文件源码 阅读 31 收藏 0 点赞 0 评论 0
def __call__(self, z, y, test=False, apply_f=False):
        mean, ln_var = self.forward_one_step(z, y, test=test, apply_f=False)
        if apply_f:
            return F.gaussian(mean, ln_var)
        return mean, ln_var
vae_m1.py 文件源码 项目:variational-autoencoder 作者: musyoku 项目源码 文件源码 阅读 21 收藏 0 点赞 0 评论 0
def log_pz(self, z, mean, ln_var):
        if self.type_pz == "gaussianmarg":
            # \int q(z)logp(z)dz = -(J/2)*log2pi - (1/2)*sum_{j=1}^{J} (mu^2 + var)
            # See Appendix B [Auto-Encoding Variational Bayes](http://arxiv.org/abs/1312.6114)
            # See https://github.com/dpkingma/nips14-ssl/blob/master/anglepy/models/VAE_YZ_X.py line 106
            log_pz = -0.5 * (math.log(2.0 * math.pi) + mean * mean + F.exp(ln_var))
        elif self.type_pz == "gaussian":
            log_pz = -0.5 * math.log(2.0 * math.pi) - 0.5 * z ** 2
        return F.sum(log_pz, axis=1)

    # this will not be used for bernoulli decoder
vae_m1.py 文件源码 项目:variational-autoencoder 作者: musyoku 项目源码 文件源码 阅读 23 收藏 0 点赞 0 评论 0
def log_qz_x(self, z, mean, ln_var):
        if self.type_qz == "gaussianmarg":
            # \int q(z)logq(z)dz = -(J/2)*log2pi - (1/2)*sum_{j=1}^{J} (1 + logvar)
            # See Appendix B [Auto-Encoding Variational Bayes](http://arxiv.org/abs/1312.6114)
            # See https://github.com/dpkingma/nips14-ssl/blob/master/anglepy/models/VAE_YZ_X.py line 118
            log_qz_x = -0.5 * F.sum((math.log(2.0 * math.pi) + 1 + ln_var), axis=1)
        elif self.type_qz == "gaussian":
            log_qz_x = -self.gaussian_nll_keepbatch(z, mean, ln_var)
        return log_qz_x
vae_m1.py 文件源码 项目:variational-autoencoder 作者: musyoku 项目源码 文件源码 阅读 23 收藏 0 点赞 0 评论 0
def __call__(self, x, test=False, apply_f=True):
        mean, ln_var = self.forward_one_step(x, test=test, apply_f=apply_f)
        if apply_f:
            return F.gaussian(mean, ln_var)
        return mean, ln_var

# Network structure is same as the Encoder
model.py 文件源码 项目:dgm 作者: ashwindcruz 项目源码 文件源码 阅读 20 收藏 0 点赞 0 评论 0
def __call__(self, x):
        # Obtain parameters for q(z|x)
        encoding_time = time.time()
        self.encode(x)
        encoding_time = float(time.time() - encoding_time)

        decoding_time_average = 0.

        xp = cuda.cupy
        self.importance_weights = 0
        self.w_holder = []
        self.kl = 0
        self.logp = 0

        for j in xrange(self.num_zsamples):
            # Sample z ~ q(z|x)
            z = F.gaussian(self.qmu, self.qln_var)

            # Compute log q(z|x)
            encoder_log = gaussian_logp(z, self.qmu, self.qln_var)

            # Obtain parameters for p(x|z)
            decoding_time = time.time()
            self.decode(z)
            decoding_time = time.time() - decoding_time
            decoding_time_average += decoding_time

            # Compute log p(x|z)
            decoder_log = bernoulli_logp(x, self.p_ber_prob_logit)

            # Compute log p(z). 
            prior_log = gaussian_logp0(z)

            # Store the latest log weight'
            current_temperature = min(self.temperature['value'],1.0)
            self.w_holder.append(decoder_log + current_temperature*(prior_log - encoder_log))

            # Store the KL and Logp equivalents. They are not used for computation but for recording and reporting. 
            self.kl += (encoder_log-prior_log)
            self.logp += (decoder_log)

        self.temperature['value'] += self.temperature['increment']


        # Compute w' for this sample (batch)
        logps = F.stack(self.w_holder)
        self.obj_batch = F.logsumexp(logps, axis=0) - np.log(self.num_zsamples)
        self.kl /= self.num_zsamples
        self.logp /= self.num_zsamples

        decoding_time_average /= self.num_zsamples

        batch_size = self.obj_batch.shape[0]

        self.obj = -F.sum(self.obj_batch)/batch_size        
        self.timing_info = np.array([encoding_time,decoding_time_average])

        return self.obj
model.py 文件源码 项目:dgm 作者: ashwindcruz 项目源码 文件源码 阅读 25 收藏 0 点赞 0 评论 0
def __call__(self, x):
        # Obtain parameters for q(z|x)
        encoding_time = time.time()
        qmu, qln_var, qh_vec_0 = self.encode(x)
        encoding_time = float(time.time() - encoding_time)

        decoding_time_average = 0.

        self.kl = 0
        self.logp = 0
        for j in xrange(self.num_zsamples):
            # z_0 ~ q(z|x)
            z_0 = F.gaussian(qmu, qln_var)

            # Perform Householder flow transformation, Equation (8)
            decoding_time = time.time()
            z_T = self.house_transform(z_0)

            # Obtain parameters for p(x|z_T)
            pmu, pln_var = self.decode(z_T)
            decoding_time = time.time() - decoding_time
            decoding_time_average += decoding_time

            # Compute objective
            self.logp += gaussian_logp(x, self.pmu, self.pln_var)
            self.kl += gaussian_kl_divergence(z_0, qmu, qln_var, z_T)


        decoding_time_average /= self.num_zsamples

        self.logp /= self.num_zsamples
        self.kl /= self.num_zsamples

        current_temperature = min(self.temperature['value'],1.0)
        self.obj_batch = self.logp - (current_temperature*self.kl)
        self.temperature['value'] += self.temperature['increment']


        self.timing_info = np.array([encoding_time,decoding_time_average])

        batch_size = self.obj_batch.shape[0]

        self.obj = -F.sum(self.obj_batch)/batch_size

        return self.obj
model.py 文件源码 项目:dgm 作者: ashwindcruz 项目源码 文件源码 阅读 33 收藏 0 点赞 0 评论 0
def __call__(self, x):
        # Compute q(z|x)
        # pdb.set_trace()
        encoding_time = time.time()
        self.encode(x)
        encoding_time = float(time.time() - encoding_time)

        decoding_time_average = 0.

        self.kl = 0
        self.logp = 0
        for j in xrange(self.num_zsamples):
            # z ~ q(z|x)
            z = F.gaussian(self.qmu, self.qln_var)
            # pdb.set_trace()
            # Compute log q(z|x)
            encoder_log = gaussian_logp(z, self.qmu, self.qln_var)

            # Compute p(x|z)
            decoding_time = time.time()
            self.decode(z)
            decoding_time = time.time() - decoding_time
            decoding_time_average += decoding_time

            # Computer p(z)
            prior_log = gaussian_logp0(z)

            # Compute objective
            self.kl += (encoder_log-prior_log)
            self.logp += bernoulli_logp(x, self.p_ber_prob_logit)
            # pdb.set_trace()

        current_temperature = min(self.temperature['value'],1.0)
        self.temperature['value'] += self.temperature['increment']

        decoding_time_average /= self.num_zsamples
        self.logp /= self.num_zsamples
        self.kl /= self.num_zsamples
        # pdb.set_trace()
        self.obj_batch = self.logp - (current_temperature*self.kl)
        self.timing_info = np.array([encoding_time,decoding_time_average])

        batch_size = self.obj_batch.shape[0]

        self.obj = -F.sum(self.obj_batch)/batch_size

        # pdb.set_trace()

        return self.obj
model.py 文件源码 项目:dgm 作者: ashwindcruz 项目源码 文件源码 阅读 23 收藏 0 点赞 0 评论 0
def __call__(self, x):
        # Obtain parameters for q(z|x)
        encoding_time = time.time()
        self.encode(x)
        encoding_time = float(time.time() - encoding_time)

        decoding_time_average = 0.

        xp = cuda.cupy
        self.importance_weights = 0
        self.w_holder = []
        self.kl = 0
        self.logp = 0

        for j in xrange(self.num_zsamples):
            # Sample z ~ q(z|x)
            z = F.gaussian(self.qmu, self.qln_var)

            # Compute log q(z|x)
            encoder_log = gaussian_logp(z, self.qmu, self.qln_var)

            # Obtain parameters for p(x|z)
            decoding_time = time.time()
            self.decode(z)
            decoding_time = time.time() - decoding_time
            decoding_time_average += decoding_time

            # Compute log p(x|z)
            decoder_log = gaussian_logp(x, self.pmu, self.pln_var)

            # Compute log p(z). The odd notation being used is to supply a mean of 0 and covariance of 1
            prior_log = gaussian_logp(z, self.qmu*0, self.qln_var/self.qln_var)

            # Store the latest log weight'
            current_temperature = min(self.temperature['value'],1.0)
            self.w_holder.append(decoder_log + current_temperature*(prior_log - encoder_log))

            # Store the KL and Logp equivalents. They are not used for computation but for recording and reporting. 
            self.kl += (encoder_log-prior_log)
            self.logp += (decoder_log)

        self.temperature['value'] += self.temperature['increment']


        # Compute w' for this sample (batch)
        logps = F.stack(self.w_holder)
        self.obj_batch = F.logsumexp(logps, axis=0) - np.log(self.num_zsamples)
        self.kl /= self.num_zsamples
        self.logp /= self.num_zsamples

        decoding_time_average /= self.num_zsamples

        batch_size = self.obj_batch.shape[0]

        self.obj = -F.sum(self.obj_batch)/batch_size        
        self.timing_info = np.array([encoding_time,decoding_time_average])

        return self.obj
model.py 文件源码 项目:dgm 作者: ashwindcruz 项目源码 文件源码 阅读 27 收藏 0 点赞 0 评论 0
def __call__(self, x):
        # Compute q(z|x)
        # pdb.set_trace()
        encoding_time = time.time()
        self.encode(x)
        encoding_time = float(time.time() - encoding_time)

        decoding_time_average = 0.

        self.kl = 0
        self.logp = 0
        for j in xrange(self.num_zsamples):
            # z ~ q(z|x)
            z = F.gaussian(self.qmu, self.qln_var)
            # pdb.set_trace()
            # Compute log q(z|x)
            encoder_log = gaussian_logp(z, self.qmu, self.qln_var)

            # Compute p(x|z)
            decoding_time = time.time()
            self.decode(z)
            decoding_time = time.time() - decoding_time
            decoding_time_average += decoding_time

            # Computer p(z)
            prior_log = gaussian_logp0(z)

            # Compute objective
            self.kl += (encoder_log-prior_log)
            self.logp += bernoulli_logp(x, self.p_ber_prob_logit)
            # pdb.set_trace()

        current_temperature = min(self.temperature['value'],1.0)
        self.temperature['value'] += self.temperature['increment']

        decoding_time_average /= self.num_zsamples
        self.logp /= self.num_zsamples
        self.kl /= self.num_zsamples
        # pdb.set_trace()
        self.obj_batch = self.logp - (current_temperature*self.kl)
        self.timing_info = np.array([encoding_time,decoding_time_average])

        batch_size = self.obj_batch.shape[0]

        self.obj = -F.sum(self.obj_batch)/batch_size

        # pdb.set_trace()

        return self.obj
model.py 文件源码 项目:dgm 作者: ashwindcruz 项目源码 文件源码 阅读 23 收藏 0 点赞 0 评论 0
def __call__(self, x):
        # Obtain parameters for q(z|x)
        encoding_time = time.time()
        qmu, qln_var, qh_vec_0 = self.encode(x)
        encoding_time = float(time.time() - encoding_time)

        decoding_time_average = 0.

        self.kl = 0
        self.logp = 0
        for j in xrange(self.num_zsamples):
            # z_0 ~ q(z|x)
            z_0 = F.gaussian(qmu, qln_var)

            # Perform Householder flow transformation, Equation (8)
            decoding_time = time.time()
            z_T = self.house_transform(z_0)

            # Obtain parameters for p(x|z_T)
            p_ber_prob_logit = self.decode(z_T)
            decoding_time = time.time() - decoding_time
            decoding_time_average += decoding_time

            # Compute objective
            self.logp += bernoulli_logp(x, self.p_ber_prob_logit)
            self.kl += gaussian_kl_divergence(z_0, qmu, qln_var, z_T)


        decoding_time_average /= self.num_zsamples

        self.logp /= self.num_zsamples
        self.kl /= self.num_zsamples

        current_temperature = min(self.temperature['value'],1.0)
        self.obj_batch = self.logp - (current_temperature*self.kl)
        self.temperature['value'] += self.temperature['increment']


        self.timing_info = np.array([encoding_time,decoding_time_average])

        batch_size = self.obj_batch.shape[0]

        self.obj = -F.sum(self.obj_batch)/batch_size

        return self.obj
model.py 文件源码 项目:dgm 作者: ashwindcruz 项目源码 文件源码 阅读 22 收藏 0 点赞 0 评论 0
def __call__(self, x):
        # Obtain parameters for q(z|x)
        encoding_time = time.time()
        qmu, qln_var, qh_vec_0 = self.encode(x)
        encoding_time = float(time.time() - encoding_time)

        decoding_time_average = 0.

        self.kl = 0
        self.logp = 0
        for j in xrange(self.num_zsamples):
            # z_0 ~ q(z|x)
            z_0 = F.gaussian(qmu, qln_var)

            # Perform Householder flow transformation, Equation (8)
            decoding_time = time.time()
            z_T = self.house_transform(z_0)

            # Obtain parameters for p(x|z_T)
            p_ber_prob_logit = self.decode(z_T)
            decoding_time = time.time() - decoding_time
            decoding_time_average += decoding_time

            # Compute objective
            self.logp += bernoulli_logp(x, self.p_ber_prob_logit)
            self.kl += gaussian_kl_divergence(z_0, qmu, qln_var, z_T)


        decoding_time_average /= self.num_zsamples

        self.logp /= self.num_zsamples
        self.kl /= self.num_zsamples

        current_temperature = min(self.temperature['value'],1.0)
        self.obj_batch = self.logp - (current_temperature*self.kl)
        self.temperature['value'] += self.temperature['increment']


        self.timing_info = np.array([encoding_time,decoding_time_average])

        batch_size = self.obj_batch.shape[0]

        self.obj = -F.sum(self.obj_batch)/batch_size

        return self.obj


问题


面经


文章

微信
公众号

扫码关注公众号