我正在从TensorFlow文档https://www.tensorflow.org/tutorials/generative/cvae#define_the_loss_function_and_the_optimizer提供的一个例子中学习
通过最大限度地提高边际对数似然上的证据下限(ELBO)来训练。
在实践中,优化这个期望值的单样本Monte估计:logp(x连z)+ logp(z) -logq(z\x)。
损失职能的执行情况如下:
def log_normal_pdf(sample, mean, logvar, raxis=1):
log2pi = tf.math.log(2. * np.pi)
return tf.reduce_sum(
-.5 * ((sample - mean) ** 2. * tf.exp(-logvar) + logvar + log2pi),
axis=raxis)
def compute_loss(model, x):
mean, logvar = model.encode(x)
z = model.reparameterize(mean, logvar)
x_logit = model.decode(z)
cross_ent = tf.nn.sigmoid_cross_entropy_with_logits(logits=x_logit, labels=x)
logpx_z = -tf.reduce_sum(cross_ent, axis=[1, 2, 3])
logpz = log_normal_pdf(z, 0., 0.)
logqz_x = log_normal_pdf(z, mean, logvar)
return -tf.reduce_mean(logpx_z + logpz - logqz_x)由于此示例使用MINIST数据集,因此可以将x标准化为0,1,此处使用sigmoid_cross_entropy_with_logits。
我的问题是:
(https://en.wikipedia.org/wiki/Huber_loss)?
x > 1,可以使用什么样的损失?ELBO损失来度量p(x=z)吗? # Iterate over the batches of the dataset.
for step, x_batch_train in enumerate(train_dataset):
with tf.GradientTape() as tape:
reconstructed = vae(x_batch_train)
# Compute reconstruction loss
loss = mse_loss_fn(x_batch_train, reconstructed)
loss += sum(vae.losses) # Add KLD regularization loss发布于 2022-06-30 18:06:51
在变分自动编码器的损失函数中,联合优化两个项:
预测与标号之间的重建损失,类似于参数化概率分布与假定的真概率分布之间的正态autoencoder
度量的。
对于重建损失部分,您可以选择适合您的数据的任何损失函数,包括MSE和Huber。不过,标准化您的输入特性通常仍然是个好主意。
https://stackoverflow.com/questions/72818794
复制相似问题