李嘉璇 TensorFlow技术解析与实战 第三章笔记

TensorBoard使用

TensorBoard TensorFlow 自带的一个强大的可视化工具,也是一个 Web 应用程序套件。
TensorBoard 目前支持 7 种可视化,即 SCALARSIMAGESAUDIOGRAPHSDISTRIBUTIONS
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界面

精度和交叉熵曲线:

李嘉璇 TensorFlow技术解析与实战 第三章笔记_第1张图片


dropout:(还不是很懂)

李嘉璇 TensorFlow技术解析与实战 第三章笔记_第2张图片

layer1与layer2中偏差值biases和权值weights的max、min、mean、std(标准差):

李嘉璇 TensorFlow技术解析与实战 第三章笔记_第3张图片

GRAPHS界面

展示数据流图,节点之前的连线为数据流,连线越粗,说明在两节点之间流动的张量tensor越多。可以查看某次迭代各个节点的计算时间和内存消耗。

李嘉璇 TensorFlow技术解析与实战 第三章笔记_第4张图片

DISTRIBUTIONS 面板

用平面来表示来自特定层的激活前后、权重和偏置的分布。

李嘉璇 TensorFlow技术解析与实战 第三章笔记_第5张图片

HISTOGRAMS 面板

立体地展现来自特定层的激活前后、权重和偏置的分布。

李嘉璇 TensorFlow技术解析与实战 第三章笔记_第6张图片

EMBEDDINGS 面板

MNIST 这个示例中无法展示,Word2vec 例子来看一下这个面板的词嵌入投影仪。



降维分析

word2vec_basic.py 中,从获得数据到最终得到可视化的结果的过程分为 5 步。

  1. 下载文件并读取数据。主要是 read_data 函数,它读取输入的数据,输出一个 list,里面的每一项就是一个词。
  2. 建立一个词汇字典。这里首先建立了一个词汇字典,字典里是对应的词和这个词的编码。
  3. 产生一个批次(batch)的训练数据。这里定义 generate_batch 函数,输入 batch_sizenum_skips skip_window,其中 batch_size 是每个 batch 的大小, num_skips 代表样本的源端要考虑几次, skip_windows 代表左右各考虑多少个词,其中 skip_windows*2=num_skips。最后返回的是 batch labelbatch 的形状是[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,下文是 1212 的上文是 3084,下文是 66 的上文是 12,下文是 195195 的上文是 6,下文是 90。因此,对应输出的 label 就是:

  4. 构建和训练模型。这里我们构建一个 Skip-gram 模型,具体模型搭建可以参参 Skip-gram的相关论文。
  5. t-SNE 降维呈现。这里我们将上一步训练的结果做了一个 t-SNE 降维处理,最终用Matplotlib 绘制出图形
t-SNE降维方法:

t-SNE 是流形学习( manifold Learning)方法的一种。它假设数据是均匀采样于一个高维空间的低维流形,流形学习就是找到高维空间中的低维流形,并求出相应的嵌入映射,以实现维数约简或者数据可视化。流形学习方法分为线性的和非线性的两种。线性的流形学习方法如主成份分析( PCA),非线性的流形学习方法如等距特征映射( Isomap)、拉普拉斯特征映射( LaplacianeigenmapsLE)、局部线性嵌入( Locally-linear embeddingLLE)等。


EMBEDDINGS 面板(演示界面只有mac系统的,没有windows系统内容)

EMBEDDINGS 面板左侧的工具栏中,可以选择降维的方式,有 T-SNEPCA CUSTOM的降维方式,并且可以做二维/三维的图像切换。 可以手动调整Dimension(困惑度)、 Learning rate(学习率)等参数,最终生成 10 000 个点的分布。


总结:可视化是研究深度学习的一个重要方向,有利于我们直观地探究训练过程中的每一步发生的变化。 TensorFlow 提供了强大的工具 TensorBoard,不仅有完善的 API 接口,而且提供的面板也非常丰富。



你可能感兴趣的:(李嘉璇,学习笔记)