tensorflow - 为单个图像实现 CVAE

标签 tensorflow keras deep-learning unsupervised-learning dimensionality-reduction

我有一个多维,hyper-spectral图像 ( channels, width, height = 15, 2500, 2500 )。我想将其 15 个 channel 尺寸压缩为 5 个 channel 。因此,输出将是 ( channels, width, height = 5, 2500, 2500 )。一种简单的方法是应用 PCA。然而,性能并不是那么好。因此,我想使用变分自动编码器(VAE)。
当我在 Tensorflow 或 keras 库中看到可用的解决方案时,它显示了对 whole images 进行聚类的示例。使用卷积变分自动编码器(CVAE)。
https://www.tensorflow.org/tutorials/generative/cvae
https://keras.io/examples/generative/vae/
但是,我只有一个图像。实现 CVAE 的最佳实践是什么?是通过移动窗口方法生成样本图像吗?

最佳答案

一种方法是让 CVAE 将每个空间坐标的所有光谱特征的输入(和输出)值作为输入(和输出)值(图中红色圈出的堆栈)。因此,就您的图像而言,您将有 2500*2500 = 6250000 个输入数据样本,它们都是长度为 15 的向量。然后中间层的维度将是长度为 5 的向量。并且,而不是 2D通常沿图像的空间域使用的卷积,在这种情况下,在光谱域上使用一维卷积是有意义的(因为相邻波长的值也是相关的)。但我认为只使用全连接层也是有意义的。
enter image description here
作为免责声明,我以前从未见过以这种方式使用 CVAE,但是这样,您还将获得许多数据样本,这是学习泛化所必需的。
另一种选择确实是您所建议的 - 仅使用移动窗口生成样本(补丁)(可能步幅是补丁的一半大小)。即使您不一定会为 CVAE 获得足够的数据样本来在所有 HSI 图像上很好地概括,但我想这并不重要(如果它过拟合),因为您想在同一图像上使用它。

关于tensorflow - 为单个图像实现 CVAE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62604742/

相关文章:

tensorflow - 如何使用 TensorFlow 学习多类多输出 CNN

添加第二个 GPU 后 TensorFlow 无法工作(CUDNN_STATUS_INTERNAL_ERROR)

python - 如何从 Spacy NER 模型中获得每个实体的预测概率?

python - Keras:使用 Adadelta 优化器时学习率如何变化?

python - 为 Tensorflow 2.0 适配 Tensorflow RNN Seq2Seq 模型代码

tensorflow - 选择tensorflow对象检测API训练超参数

tensorflow - 使用 keras Convolutional1D Layer 时出现负维度错误

python - 如何在 TensorFlow 中应用渐变裁剪?

python - 如何使用预训练的keras模型作为模型add函数的参数?

python - 无法挤压 dim[1],期望维度为 1,结果为 2