def build_vae(self,encoder_shapes,encoder_filters,optimizer=tf.train.AdamOptimizer,conv=True):
self.encoder_shapes = encoder_shapes
self.encoder_filters = encoder_filters
self.encoder_X = tf.placeholder(tf.float32,shape=[None,28,28,1], name='encoder_X')
self.mu, self.sigma, self.encoder_params = self.build_encoder(self.encoder_X)
Qz = tf.contrib.distributions.Normal(mu=self.mu, sigma=self.sigma)
z_sample = Qz.sample()
self.decoded = self.build_generator(z_sample,self.phase,weights=self.gen_params)
self.klloss = -(1)*tf.reduce_sum(1 + tf.log(z_sigma**2) - z_mu**2 - z_sigma**2,1)
#sigmaloss = tf.reduce_sum((tf.ones_like(z_sigma)-z_sigma)**4 )
offset = 1e-7
obs = tf.clip_by_value(self.decoded, offset, 1 - offset)
self.logloss = -1*(tf.reduce_sum(self.encoder_X*tf.log(obs) + (1-self.encoder_X)*tf.log(1-obs)))
self.vae_cost = tf.reduce_mean(logloss + klloss)
self.vae_optimizer = optimizer(self.LR)
self.train_step_e = self.vae_optimizer.minimize(self.vae_cost,var_list=self.encoder_params)
评论列表
文章目录