本节讨论的可视化高维数据特指embedding features。embedding是指将客观世界中离散的物体或对象(如单词、短语、图片等)映射到特征空间中的操作。embedding feature是指映射后的特征空间中连续且稠密的高维向量。
由于deep learning or machine learning的大多数模型都是为稠密的连续向量而设计的,所以embedding representations可以让经典算法模型处理许多离散的输入对象。
在Automatic Speech Recognition(ASR)、Image Recognition, and Recommendation System等机器学习领域,通常使用embedding vector to describe 客观世界的物体。embedding vector不是对物体进行简单的编号,而是在尽量保持相似性不变的前提下对Object进行特征抽象和编码。通过不断地训练,我们能够将objective world中的物体“不失真”地映射到high-level feature space,进而对这些feature vector进行classification, regressiong and prediction。
TensorBoard可视化高维数据
TensorBoard可视化高维数据的模块叫做embedding projector,打开EMBEDDINGS面板即可查看。
Embedding projector是将high-dim data投影到low-dim space中的可视化模块。它内置t-SNE(t-Distributed Stochastic Neighbor Embedding)和PCA(Principal Component Analysis)两种降维算法,也支持用户自定义descending dimension methods。
TB可视化embedding features流程如上图所示,主要包括了embedding variables, metadata, and projector configuration。
- 创建embedding variables, 并保存到checkpoint file中
- 创建metadata,并保存到metadata.tsv中
- 设置projector config parameters,并保存到projector_config.pbtxt中
- 运行TB程序,加载上面生成的3个文件,查看embedding feature的可视化结果
嵌入变量
Embedding variable是待可视化数据的载体,TB要求必须按照二阶张量形式<嵌入数据总数,嵌入数据维度>表示待可视化的高维数据。embedding variable本身也是一种变量,通过tf.Saver.save()可以直接写入到checkpoint file中。
embedding_var = tf.Variable(tf.stack(mnist.test.images[:1000]), trainable=False, name='embedding')
# create embedding_saver to save embedding variable
embedding_saver = tf.train.Saver([embedding_var])
embedding_saver.save(sess, os.path.join(log_dir, 'mnist.ckpt'))
嵌入变量元数据
用于描述embedding variable中每个元素的数据特征集合。在TB中展示投影的数据点时,我们可以为其添加对应的数据特征,以便更清晰地观察数据。例如,为MNIST图像的embedding variables添加对应的数字标签,或者为词向量的embedding variables添加对应的出现频数。
TB推荐使用TSV文件格式保存metadata of embedding variables。
对于表示图像的嵌入变量,TB还支持为其添加对应的图像文件,以供页面成像。
投影配置参数
用于指定TB可视化embedding feature时所使用的embedding varibale and metadata。Projector config parameters 存储在以Protocol Buffer序列化格式保存的文本文件中(后缀为.pbtxt)。这些configurations包括tensor_name, metadata_path和全景图配置(sprite)等。
projector config file示例:
embedding{
tensor_name: "embedding:0"
metadata_path: "./summary/embeddings/metadata.tsv"
sprite {
image_path: './summary/images/mnist_10k_sprite.png'
single_image_dim: 28
single_image_dim: 28
}
}
可视化MNIST数据集示例
源码见tf_embedding_feature.py
运行前,务必在当前路径下创建’log/summary/images’文件夹:
$: mkdir -p log/sumamry/images
并将下载MNIST sprite image(全景图),放到该文件夹下。然后在命令行运行如下指令:
$ tensorboard --logdir='log/summary'