【问题标题】:VAE in Keras to visualize latent space on 3 classes of imagesKeras 中的 VAE 可在 3 类图像上可视化潜在空间
【发布时间】:2020-09-21 07:34:44
【问题描述】:

我正在使用未标记的输入图像训练变分自动编码器 (VAE)。我的兴趣是在潜在空间中可视化 3 类未标记的数据。 我将潜在维度设置为 128,并进一步使用 PCA 在 2D 中进行可视化。

我对此并不陌生,并希望对此有所了解。 首先,当我训练网络时,我看到显示的准确性和验证准确性。由于网络的输入图像没有标记,我想知道准确度是基于什么计算的。 (根据我的阅读,准确率=正确预测的样本数/样本总数)。

其次,我的训练代码如下所示:

    vae.compile(optimizer='rmsprop', loss=kl_reconstruction_loss, metrics=['accuracy'])
    history=vae.fit_generator(X_train, epochs=15,
                    validation_data=next(X_val), validation_steps=5,
                    callbacks=[ReduceLROnPlateau(monitor='val_loss', factor=0.5, verbose=2,
                    patience=4, cooldown=1, min_lr=0.0001)])

在训练期间,验证损失变为 0,准确度变为 2 个 epoch 中的 1 个。 在这里,对于三类未标记的数据,经过训练的网络不能很好地聚类 3 个不同的类。不太清楚为什么网络在测试数据集上不能很好地泛化,而准确率会上升到 1,而损失会下降到 0

Epoch 1/2
2164/2164 [==============================] - 872s 403ms/step - loss: 6668.9662 - accuracy: 0.7253 - val_loss: 3785921.0000 - val_accuracy: 0.9982
Epoch 2/2
2164/2164 [==============================] - 869s 401ms/step - loss: 0.0000e+00 - accuracy: 1.0000 - val_loss: 3857374.2500 - val_accuracy: 0.9983

有什么见解/建议吗?

【问题讨论】:

  • 准确性是您案例的误导性指标

标签: keras neural-network autoencoder


【解决方案1】:

VAE 的目的是将输入压缩为表现良好的潜在表示,然后使用该潜在表示准确地重构输入。 VAE 的损失中有两个术语,每个对应于第一句中的一个任务。损失中的第一项 - KL 散度项 - 强制从多维单位高斯分布中提取潜在表示。损失中的第二项使 VAE 准确地重建输入。通常人们会在输入和输出之间使用 L2 损失之类的东西(有更多花哨的东西可以使用,但 L2 损失通常没问题)。

由于模型不执行分类,因此准确度不是一个很好的指标。了解 VAE 重建输入的准确度的更好方法是监控诸如均方误差之类的东西。

您的代码输出(训练损失在 1 个 epoch 后变为 0)表明模型过度拟合了训练数据。尝试规范化您的模型(或使用容量较小的模型)或减少每个训练 epoch 的步数,以便更频繁地监控模型在验证数据上的性能。

此外,您对 next(X_val) 的使用只是从您的验证集中获取一个元素。您可能希望传入验证数据生成器,而不是验证数据中的单个元素。删除 next() 调用将实现这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-03
    • 1970-01-01
    • 2016-07-10
    • 2015-10-09
    • 2017-07-27
    • 2020-09-13
    • 1970-01-01
    • 2019-09-23
    相关资源
    最近更新 更多