李嘉璇 TensorFlow技术解析与实战 第三章笔记
TensorBoard使用:
TensorBoard 是 TensorFlow 自带的一个强大的可视化工具,也是一个 Web 应用程序套件。
TensorBoard 目前支持 7 种可视化,即 SCALARS、 IMAGES、 AUDIO、 GRAPHS、 DISTRIBUTIONS、
HISTOGRAMS 和 EMBEDDINGS。这 7 种可视化的主要功能如下。
● SCALARS:展示训练过程中的准确率、损失值、权重/偏置的变化情况。
● IMAGES:展示训练过程中记录的图像。
● AUDIO:展示训练过程中记录的音频。
● GRAPHS:展示模型的数据流图,以及训练在各个设备上消耗的内存和时间。
● DISTRIBUTIONS:展示训练过程中记录的数据的分布图。
● HISTOGRAMS:展示训练过程中记录的数据的柱状图。
● EMBEDDINGS:展示词向量(如 Word2vec)后的投影分布。
以手写数字识别的入门例子为例:
win7系统在windows powershell中:
python tensorflow-1.1.0/tensorflow/examples/tutorials/mnist/mnist_with_summaries.py
打开tensorboard:
tensorboard ––logdir=/tmp/tensorflow/mnist/logs/mnist_with_summaries
需要注意的问题:
- 手敲代码,不能复制文档的代码段。(“-”与“-”不一样)
- tensorboard偶尔会显示No dashboards are active for the current data set.(解决办法:windows powershell回到当前磁盘的根目录,例如:不应当在PS E:\tmp\tensorflow\mnist\logs下运行tensorboard,而应当回到根目录cd \,再运行tensorboard命令tensorboard ––logdir=/tmp/tensorflow/mnist/logs/mnist_with_summaries)
SCALARS界面
精度和交叉熵曲线:dropout:(还不是很懂)
layer1与layer2中偏差值biases和权值weights的max、min、mean、std(标准差):
GRAPHS界面
展示数据流图,节点之前的连线为数据流,连线越粗,说明在两节点之间流动的张量tensor越多。可以查看某次迭代各个节点的计算时间和内存消耗。
DISTRIBUTIONS 面板
用平面来表示来自特定层的**前后、权重和偏置的分布。
HISTOGRAMS 面板
立体地展现来自特定层的**前后、权重和偏置的分布。EMBEDDINGS 面板
在 MNIST 这个示例中无法展示,用 Word2vec 例子来看一下这个面板的词嵌入投影仪。
降维分析
在 word2vec_basic.py 中,从获得数据到最终得到可视化的结果的过程分为 5 步。- 下载文件并读取数据。主要是 read_data 函数,它读取输入的数据,输出一个 list,里面的每一项就是一个词。
- 建立一个词汇字典。这里首先建立了一个词汇字典,字典里是对应的词和这个词的编码。
- 产生一个批次(batch)的训练数据。这里定义 generate_batch 函数,输入 batch_size、num_skips 和 skip_window,其中 batch_size 是每个 batch 的大小, num_skips 代表样本的源端要考虑几次, skip_windows 代表左右各考虑多少个词,其中 skip_windows*2=num_skips。最后返回的是 batch 和 label, batch 的形状是[batch_size], label 的形状是[batch_size, 1],也就是用一个中心词来预测一个周边词。 (不是很理解)举个例子。假设我们的句子是“我在写一首歌”,我们将每一个字用 dictionary 中的编码代替,就变成了[123, 3084, 12, 6, 195, 90],假设这里的 window_size 是 3,也就是只预测上文一个词,下文一个词,假设我们的 generate_batch 函数从 3084 出发,源端重复 2 次,那么 batch 就是[3084 3084 12 12 6 6 195 195], 3084 的上文是 123,下文是 12; 12 的上文是 3084,下文是 6;6 的上文是 12,下文是 195; 195 的上文是 6,下文是 90。因此,对应输出的 label 就是:
- 构建和训练模型。这里我们构建一个 Skip-gram 模型,具体模型搭建可以参参 Skip-gram的相关论文。
- 用 t-SNE 降维呈现。这里我们将上一步训练的结果做了一个 t-SNE 降维处理,最终用Matplotlib 绘制出图形。
t-SNE 是流形学习( manifold Learning)方法的一种。它假设数据是均匀采样于一个高维空间的低维流形,流形学习就是找到高维空间中的低维流形,并求出相应的嵌入映射,以实现维数约简或者数据可视化。流形学习方法分为线性的和非线性的两种。线性的流形学习方法如主成份分析( PCA),非线性的流形学习方法如等距特征映射( Isomap)、拉普拉斯特征映射( Laplacianeigenmaps, LE)、局部线性嵌入( Locally-linear embedding, LLE)等。
EMBEDDINGS 面板(演示界面只有mac系统的,没有windows系统内容)
在 EMBEDDINGS 面板左侧的工具栏中,可以选择降维的方式,有 T-SNE、 PCA 和 CUSTOM的降维方式,并且可以做二维/三维的图像切换。 可以手动调整Dimension(困惑度)、 Learning rate(学习率)等参数,最终生成 10 000 个点的分布。总结:可视化是研究深度学习的一个重要方向,有利于我们直观地探究训练过程中的每一步发生的变化。 TensorFlow 提供了强大的工具 TensorBoard,不仅有完善的 API 接口,而且提供的面板也非常丰富。