gpt4 book ai didi

neural-network - Keras - 变分自编码器 NaN 损失

转载 作者:行者123 更新时间:2023-12-03 22:41:17 36 4
gpt4 key购买 nike

我正在尝试使用我在 Keras 示例( https://github.com/keras-team/keras/blob/master/examples/variational_autoencoder.py )中找到的变分自动编码器的实现。

我只是重构了代码,以便在 Jupyter 笔记本中更轻松地使用它(我的代码:https://github.com/matbell/Autoencoders/blob/master/models/vae.py)。

但是,当我尝试在我的数据上拟合模型时,我得到以下输出:

Autoencoders/models/vae.py:69: UserWarning: Output "dense_5" missing from loss dictionary. We assume this was done on purpose, and we will not be expecting any data to be passed to "dense_5" during training.
self.vae.compile(optimizer='rmsprop')

Train on 15474 samples, validate on 3869 samples
Epoch 1/50
15474/15474 [==============================] - 1s 76us/step - loss: nan - val_loss: nan
Epoch 2/50
15474/15474 [==============================] - 1s 65us/step - loss: nan - val_loss: nan
Epoch 3/50
15474/15474 [==============================] - 1s 69us/step - loss: nan - val_loss: nan
Epoch 4/50
15474/15474 [==============================] - 1s 62us/step - loss: nan - val_loss: nan

并且所有训练时期的损失保持不变。

我不是深度学习和神经网络领域的专家,所以也许我错过了一些东西......

这是输入数据,其中 datalabels是两个 pandas.DataFrame .
In: data.shape
Out: (19343, 87)

In: label.shape
Out: (19343, 1)

这就是我如何使用 Vae Jupyter 笔记本中的类(来自我的代码):
INPUT_SIZE = len(data.columns)
X_train, X_test, y_train, y_test = train_test_split(data, labels, test_size = 0.2)

vae = Vae(INPUT_SIZE, intermediate_dim=32)
vae.fit(X_train, X_test)

谢谢你的帮助!

最佳答案

您可能希望将 log_var 密集层初始化为零。我自己也遇到了问题(代码略有不同,但有效地做同样的事情),结果证明,无论初始化的变化权重有多小,它们都会在几轮 SGD 中爆炸。

epsilon ~N(0,1) 和重建误差之间的随机相关性足以使权重逐渐变为非零。

编辑 - 此外,指数包装变化确实有助于爆炸梯度。由于指数,将权重的初始值设置为零会产生 1 的初始变化。将其初始化为一个较低的负值,同时发出接近于零的初始变化,使第一次运行时的梯度变得巨大。零给了我最好的结果。

关于neural-network - Keras - 变分自编码器 NaN 损失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49634488/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com