- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Chainer 框架在 Python 中构建变分自动编码器 (VAE) (link) 。我在 github 上找到了各种工作示例,并正在尝试改编其中之一。我已经成功地让它运行并且工作得很好,但是仍然有一些我不明白的地方。
在下面的代码片段中,定义解码器的行为,有一个可选的额外 sigmoid 函数:
def decode(self, z, sigmoid=True):
h = F.leaky_relu(self.ld1(z))
h = F.leaky_relu(self.ld2(h))
h = self.ld3(h)
if sigmoid:
return F.sigmoid(h)
else:
return h
该函数在损失函数中使用 Sigmoid=False 进行训练时使用:
def lf(x):
mu, ln_var = self.encode(x)
batchsize = len(mu)
# reconstruction loss
rec_loss = 0
for l in six.moves.range(k):
z = F.gaussian(mu, ln_var)
# ↓here↓
rec_loss += F.bernoulli_nll(x, self.decode(z, sigmoid=False)) / (k * batchsize)
self.rec_loss = rec_loss
# adding latent loss
self.latent_loss = beta * gaussian_kl_divergence(mu, ln_var) / batchsize
self.loss = self.rec_loss + self.latent_loss
chainer.report({'rec_loss': self.rec_loss, 'latent_loss': self.latent_loss, 'loss': self.loss}, observer=self)
return self.loss
在训练后生成示例时,与 Sigmoid=True(隐式)一起使用:
z = C.Variable(np.random.normal(0, 1, (self._batchsize, args.dimz)).astype(np.float32))
with C.using_config('train', False), C.no_backprop_mode():
xrand = self._model.decode(z) # ←here
xrand = np.asarray(xrand.array).reshape(self._batchsize, 3, 18, 11)
<小时/>
为什么要使用这个额外的 sigmoid 函数?它发挥什么作用?为什么在训练后添加它,而不是在训练期间添加?
最佳答案
阅读this documentation的注释。 F.bernoulli_nll
的输入参数不应该是 sigmoided,因为该函数内部包含 sigmoid 函数。因此,当将隐藏变量输入F.bernoulli_nll
时,指定sigmoid=False
。 (我对这种困惑也有完全相同的经历。)
关于python-3.x - 为什么这个 VAE 实现有时会添加 sigmoid 运算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54083075/
我正在为 MNIST 数据集在 Tensorflow 中试验 VAE 实现。首先,我训练了一个基于 MLP 编码器和解码器的 VAE。它训练得很好,损失减少了,并且生成了看似合理的数字。下面是这个基于
我正在构建一个加载巨大数据集的 VAE。输入数据是维度为 (batch_size, 48, 48, 48) 的 3D 二进制体素数据。为了在训练中一个一个地加载数据,我构建了一个生成器,如下所示 cl
我正在尝试构建一个 2 阶段 VQ-VAE-2 + PixelCNN,如论文中所示:“使用 VQ-VAE-2 生成多样化的高保真图像”(https://arxiv.org/pdf/1906.00446
我正在尝试构建一个 2 阶段 VQ-VAE-2 + PixelCNN,如论文中所示:“使用 VQ-VAE-2 生成多样化的高保真图像”(https://arxiv.org/pdf/1906.00446
我是机器学习新手,正在使用以下代码在 MNISET 数据集上创建示例 VAE # We are going to use MINISET Dataset to train our GAN. # All
基于this example在 keras 中,我构建了一个自动编码器并在 MNIST 数据集上对其进行训练,但根据我如何重建输入,输出会有所不同。 第 1 行 = 原始 MNIST test_dat
我正在尝试使用 Keras 为 LSTM-VAE 建模以进行时间序列重建。 我曾经提到过https://github.com/twairball/keras_lstm_vae/blob/master/
它似乎不是 https://en.wikipedia.org/wiki/Log-normal_distribution 中所见的常规日志规范 pdf https://www.tensorflow.or
我正在使用 Chainer 框架在 Python 中构建变分自动编码器 (VAE) (link) 。我在 github 上找到了各种工作示例,并正在尝试改编其中之一。我已经成功地让它运行并且工作得很好
我正在学习tutorial这里。我的模型部分是: input_img = keras.Input(shape=img_shape) x = layers.Conv2D(32, (3, 3),
因此,您可以将随机输入 (z) 提供给神经网络并使输出随机,但这只是 f(p(z)),其中 f(.) 是确定性神经网络,因此它将充当转换为更复杂的分布。 引入随机性的另一种方法是将 NN 输出视为特定
我是一名优秀的程序员,十分优秀!