Mat*_*ana 4 neural-network autoencoder deep-learning keras
我正在尝试使用我在 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
Run Code Online (Sandbox Code Playgroud)
并且所有训练时期的损失保持不变。
我不是深度学习和神经网络领域的专家,所以也许我错过了一些东西......
这是输入数据,其中data
和labels
是两个pandas.DataFrame
。
In: data.shape
Out: (19343, 87)
In: label.shape
Out: (19343, 1)
Run Code Online (Sandbox Code Playgroud)
这就是我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)
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
您可能希望将 log_var 密集层初始化为零。我自己也遇到了问题(代码略有不同,但有效地做同样的事情),结果证明,无论初始化的变化权重有多小,它们都会在几轮 SGD 中爆炸。
epsilon ~N(0,1) 和重建误差之间的随机相关性足以使权重逐渐变为非零。
编辑 - 此外,指数包装变化确实有助于爆炸梯度。由于指数,将权重的初始值设置为零会产生 1 的初始变化。将其初始化为一个较低的负值,同时发出接近于零的初始变化,使第一次运行时的梯度变得巨大。零给了我最好的结果。
如果以上都没有帮助到你。确保您的输入在 [0, 1] 之间标准化。使用 MNIST 的一种简单方法是
X_train = X_train.astype('float32') / 255.0
X_test = X_test.astype('float32') / 255.0
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7320 次 |
最近记录: |