我正在尝试使用我在keras示例中找到的变分自动编码器的实现(https://github.com/keras.com/keras-team/keras/keras/keras/blob/master/master/master/examples/variational_autoencoder.py(。
我刚刚重新制定了代码,以便从jupyter笔记本(我的代码:https://github.com/matbell/autoencoders/blob/master/master/models/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
和所有训练时期的损失保持不变。
我不是深度学习和神经网络领域的专家,所以也许我缺少一些东西。
这是输入数据,其中data
和labels
是两个pandas.DataFrame
。
In: data.shape
Out: (19343, 87)
In: label.shape
Out: (19343, 1)
这就是我在jupyter笔记本中使用Vae
类(来自我的代码(的方式:
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(和重建误差之间的随机相关性将足以轻轻地将权重带到非零。
编辑 - 另外,指数包装变体确实有助于爆炸梯度。将权重的初始值设置为零,从而给出一个初始变化,因为指数为指数。将其初始化为低负值,同时散发初始接近零变化,这使得梯度在最初的运行中很大。零给我最好的结果。
如果以上都没有帮助您。确保您的输入在[0,1]之间正常化。使用MNIST的一种简单方法是
X_train = X_train.astype('float32') / 255.0
X_test = X_test.astype('float32') / 255.0
您的输入由NAN值组成,这就是为什么您在输出中看到NAN的原因。您可以使用以下内容来计算NAN的NAN:
np.count_nonzero(np.isnan(data))
如果NAN不相关,只需将其从培训数据中删除或将其映射到特定常数(例如0或-1(,该常数会照顾您的问题
我也有类似的问题,因为有一些输入包含NAN。如果其中只有几个例子,其中有一个NAN,那么所有的权重和损失也将是NAN。再次检查数据的内容!
您不正确地适合该模型。您的合适电话暗示: vae.fit(X = X_train, y = X_test)
,虽然应该是:
vae.fit(X_train,X_train , validation_data = X_test)