在TensorBoard中使用t-SNE实现TensorFlow自动编码器的可视化嵌入
2017年08月17日 由 yining 发表
104383
0
将TensorBoard插在MNIST数据集上的一个自动编码器上,用于演示非监督机器学习的t-SNE嵌入的可视化。
需要说明的是,在这个项目中,我们有两种类型的嵌入:
- 我们使用自动编码器来嵌入和压缩数据集。这是对我们的数据进行无监督的神经压缩,并且这样的神经压缩可以揭示在无标记数据可用的各种任务中显得非常有用。
- 我们将自动编码器嵌入到t-SNE中来进一步压缩信息,从而可视化自动编码器的嵌入过程。
嵌入一个自编码器
与在原始的MNIST输入图像上运行的t-SNE嵌入相比,这里的细微差别在于,我们可以看到编码器在其压缩的内部层表示中编码的过程(在下图中称为“代码(code)”,并且通常被称为“嵌入(embedding)”)。
图片来源:https://en.wikipedia.org/wiki/File:Autoencoder_structure.png
我们在这里训练的编码器是非常简单的,只是举了一个64个神经元的代码的例子。理想情况下,它包含了卷积,并将更优化。
可视化与t-SNE
这有一篇关于如何解读t-sne的结果的文章:
https://distill.pub/2016/misread-tsne/。
下面是t-SNE在默认参数下的样子(困惑度(perplexity)为25,学习率(learning rate)为10):
请注意,主组件分析(PCA)可以以类似的方式使用。然而,在数学上,PCA比t-SNE更有趣。
下面这张动图是PCA的样子,代表了19.8%的方差:
运行代码
步骤1
运行:
python3 autoencoder_t-sne.py
步骤2
./run_tensorboard.sh
你也可以简单地运行包含在
.sh中的
同样的东西:
tensorboard --logdir=logs --port="6006"
这仅仅是在默认端口上运行TensorBoard。
步骤3
浏览本地主机:6006或http://0.0.0.06006/,然后进入“嵌入(embedding)”选项卡。
根据标签选择颜色,然后你可以使用t-sne或PCA嵌入。
现在开始享受它吧!