在 TensorFlow 里构建神经网络来可视化高维数据

AI 研习社按:本文为雷锋字幕组编译的技术博客,原标题 Building a Neural Net to Visualize High-Dimensional Data in TensorFlow,作者为 Dr. GP Pulipaka。 翻译 | 赵朋飞 校对 | 赵若伽 整理 | 孔令双

在诸如自然语言处理、推荐系统构建等深度学习研究的许多方面,词汇嵌入和高维数据无处不在。谷歌最近开源了 embedding project 项目,此项目是一个交互式、协作、可视化工具,可用于高维数据的可视化。该项目是在欧几里得空间中实现点到空间数据的映射。许多类型的大数据需要进行可视化,这些可视化包括图表、神经网络、记录关于权重的参数摘要,sigmoid 激活函数,以及机器学习模型的精度。

在这篇教程中,我们使用 NMIST 手写数字的数据集。更多关于 MNIST 手写数字数据集的解释可以参考Yann Lecun 的网站。

IDX 文件格式

IDX 文件格式是用于矢量和多种数字类型的多维矩阵的一种简单格式。

基本格式是:

神奇的数字 size in dimension 0 size in dimension 1 size in dimension 2 ….. size in dimension N 数据

这个神奇的数字是整数 (最高有效位(Most Significant Bit)在前),前2个字节为0。

第三个字节表示数据类型: 0x08: unsigned byte 0x09: signed byte 0x0B: short (2 bytes) 0x0C: int (4 bytes) 0x0D: float (4 bytes) 0x0E: double (8 bytes)

第 4 字节表示维度信息是向量还是矩阵:1 表示向量,2 表示矩阵...

每个维度的大小是 4 字节整数(高位在前,大端序,类似大部分非 Intel 处理器)

数据以类似 C 语言数组的方式保存,也就是说,最后一位维度的索引值变化最快。

很多深度学习框架已经测试过使用 MNIST 手写数字库的基准。MNIST 数据集可以很容易的被 TensorFlow 框架所使用。TensorFlow 在图表中使用张量表示数据。大部分时候张量是多为数据的表示。MNIST数据集大约有 Z784 个维度。我们生活的世界只有 Z3 维度空间。将 784 维的数据可视化方便人眼观察是一项艰巨的任务。因此,有很多技术比如主成分分析或者 t-分布领域嵌入算法(t-SN3) 可以用于降低数据维度,并在低维度空间中可视化。

通过 TensorBoard 的嵌入式项目,可以建立一个神经网络来可视化隐藏层激活的张量。因此,numpy 和 matplotlib 需要首先被导入。

图 1,导入库文件

本示例的输入数据将利用 MNIST 的手写数字数据集。

图 2,从 MNIST 数据集倒数输入数据。

解压 MNIST_data/train-images-idx3-ubyte.gz

解压 MNIST_data/train-labels-idx1-ubyte.gz

解压 MNIST_data/t10k-images-idx3-ubyte.gz

解压 MNIST_data/t10k-labels-idx1-ubyte.gz

Size of:

– Training-set: 55000

– Test-set: 10000

– Validation-set: 5000

超参数将在外部被指定为常数,因为这些参数不会被神经网络学习到。

图 3,超参数

图表需要在这里创建, 但一个完整的卷积神经网络或 FC 层(LeNet)需要随权值和偏置一起定义。

图 4,定义权值、卷积神经网络和偏置变量。

由于助手函数已经被激活,所以现在可以创建图表:

图 5,创建图表

执行下面的代码后,将在 Jupyter notebook 上启动一个交互式图表任务:

图 6,启动交互式图表任务

在执行代码后,将显示神经网络的训练精度。

Training epoch: 1 iter 0: Loss=2.28, Training Accuracy=37.0% iter 100: Loss=0.45, Training Accuracy=85.0% iter 200: Loss=0.21, Training Accuracy=95.0% iter 300: Loss=0.34, Training Accuracy=89.0% iter 400: Loss=0.29, Training Accuracy=90.0% iter 500: Loss=0.18, Training Accuracy=97.0% --------------------------------------------------------- Epoch: 1, validation loss: 0.21, validation accuracy: 94.1% --------------------------------------------------------- Training epoch: 2 iter 0: Loss=0.14, Training Accuracy=97.0% iter 100: Loss=0.19, Training Accuracy=94.0% iter 200: Loss=0.11, Training Accuracy=95.0% iter 300: Loss=0.06, Training Accuracy=99.0% iter 400: Loss=0.08, Training Accuracy=96.0% iter 500: Loss=0.12, Training Accuracy=97.0% --------------------------------------------------------- Epoch: 2, validation loss: 0.14, validation accuracy: 96.0% --------------------------------------------------------- Training epoch: 3 iter 0: Loss=0.16, Training Accuracy=96.0% iter 100: Loss=0.15, Training Accuracy=96.0% iter 200: Loss=0.08, Training Accuracy=97.0% iter 300: Loss=0.11, Training Accuracy=94.0% iter 400: Loss=0.10, Training Accuracy=96.0% iter 500: Loss=0.09, Training Accuracy=97.0% --------------------------------------------------------- Epoch: 3, validation loss: 0.11, validation accuracy: 96.7% --------------------------------------------------------- Training epoch: 4 iter 0: Loss=0.03, Training Accuracy=100.0% iter 100: Loss=0.04, Training Accuracy=99.0% iter 200: Loss=0.11, Training Accuracy=94.0% iter 300: Loss=0.05, Training Accuracy=98.0% iter 400: Loss=0.11, Training Accuracy=97.0% iter 500: Loss=0.11, Training Accuracy=95.0% --------------------------------------------------------- Epoch: 4, validation loss: 0.09, validation accuracy: 97.2% --------------------------------------------------------- Training epoch: 5 iter 0: Loss=0.11, Training Accuracy=97.0% iter 100: Loss=0.04, Training Accuracy=98.0% iter 200: Loss=0.04, Training Accuracy=100.0% iter 300: Loss=0.02, Training Accuracy=100.0% iter 400: Loss=0.11, Training Accuracy=97.0% iter 500: Loss=0.04, Training Accuracy=99.0% --------------------------------------------------------- Epoch: 5, validation loss: 0.08, validation accuracy: 97.7% --------------------------------------------------------- Training epoch: 6 iter 0: Loss=0.04, Training Accuracy=100.0% iter 100: Loss=0.07, Training Accuracy=98.0% iter 200: Loss=0.08, Training Accuracy=98.0% iter 300: Loss=0.04, Training Accuracy=99.0% iter 400: Loss=0.04, Training Accuracy=99.0% iter 500: Loss=0.05, Training Accuracy=97.0% --------------------------------------------------------- Epoch: 6, validation loss: 0.07, validation accuracy: 97.9% --------------------------------------------------------- Training epoch: 7 iter 0: Loss=0.04, Training Accuracy=99.0% iter 100: Loss=0.03, Training Accuracy=99.0% iter 200: Loss=0.07, Training Accuracy=99.0% iter 300: Loss=0.06, Training Accuracy=98.0% iter 400: Loss=0.13, Training Accuracy=96.0% iter 500: Loss=0.07, Training Accuracy=97.0% --------------------------------------------------------- Epoch: 7, validation loss: 0.07, validation accuracy: 97.8% --------------------------------------------------------- Training epoch: 8 iter 0: Loss=0.03, Training Accuracy=99.0% iter 100: Loss=0.01, Training Accuracy=100.0% iter 200: Loss=0.03, Training Accuracy=99.0% iter 300: Loss=0.02, Training Accuracy=100.0% iter 400: Loss=0.02, Training Accuracy=100.0% iter 500: Loss=0.05, Training Accuracy=98.0% --------------------------------------------------------- Epoch: 8, validation loss: 0.07, validation accuracy: 97.8% --------------------------------------------------------- Training epoch: 9 iter 0: Loss=0.04, Training Accuracy=99.0% iter 100: Loss=0.01, Training Accuracy=100.0% iter 200: Loss=0.07, Training Accuracy=98.0% iter 300: Loss=0.03, Training Accuracy=99.0% iter 400: Loss=0.03, Training Accuracy=99.0% iter 500: Loss=0.09, Training Accuracy=97.0% --------------------------------------------------------- Epoch: 9, validation loss: 0.07, validation accuracy: 97.9% --------------------------------------------------------- Training epoch: 10 iter 0: Loss=0.02, Training Accuracy=100.0% iter 100: Loss=0.03, Training Accuracy=100.0% iter 200: Loss=0.02, Training Accuracy=100.0% iter 300: Loss=0.02, Training Accuracy=100.0% iter 400: Loss=0.01, Training Accuracy=100.0% iter 500: Loss=0.01, Training Accuracy=100.0% --------------------------------------------------------- Epoch: 10, validation loss: 0.07, validation accuracy: 98.1% ---------------------------------------------------------

考虑数据集有大约 10000 个样本,神经网络的隐藏层有约 200 个节点。张量输出数据大约有 10,000 x 200 层。

图 7,将卷积神经网络的隐藏层分配给变量。

这段代码的目的是采用降维的方式可视化高维数据,以便人眼识别。元数据可以从 TensorBoard 被下载到 metadata.tsv 文件,TensorBoard 为每个样本单独保存索引和标签。这个文件必须添加到 config. 文件中。

图 8,创建 config. 对象。

在 Jupyter Notebook 上运行这个会话将会评估张量并保存数据。

图 9,在深度学习配置 log 文件中创建张量。

我已经将我的程序在 Github 上分享,在 GPSingularity 页面。

一旦会话被执行,可以通过如下命令在 TensorBoard 中将其可视化。

tensorboard –logdir=logs/embedding/ –host localhost 数据将按如下方式在 TensorBoard 中显示。

程序运行结果

图10,TensorBoard Embedded Projector 用低维度可视化高维数据

我编写的这个程序收到了 Easy TensorFlow 的鼓励 http://www.easy-tensorflow.com/ 的嵌入式可视化。

我已经将我的程序在 Github 上分享,在GPSingularity页面 。

参考资料

  • Easy TensorFlow (2018). Easy TensorFlow. 引用自 http://www.easy-tensorflow.com/
  • Smilkov, D., Thorat, N., Nicholson, C., Reif, E., Viegas, F. B., & Watternberg, M. (2016). Embedding Projector: Interactive Visualization and Interpretation of Embeddings. 引用自 https://arxiv.org/pdf/1611.05469v1.pdf

原文链接:

https://medium.com/datadriveninvestor/3-ways-to-apply-latent-semantic-analysis-on-large-corpus-text-on-macos-terminal-jupyterlab-colab-7b4dc3e1622

原文发布于微信公众号 - AI研习社(okweiwu)

原文发表时间:2018-07-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏贾老师の博客

启发式寻路算法

66930
来自专栏码云1024

a-start寻路算法

在英雄联盟之中,当你和你的队友都苦苦修炼到十八级的时候,仍然与敌方阵营不分胜负,就在你刚买好装备已经神装的时候,你看见信息框中一条队友的消息:“大龙集合”,这个...

36820
来自专栏CVer

TensorFlow从入门到精通 | 01 简单线性模型(上篇)

[TensorFlow从入门到精通] 01 简单线性模型(上)介绍了TensorFlow如何加载MNIST、定义数据维度、TensorFlow图、占位符变量和O...

11020
来自专栏人工智能

如何使用 scikit-learn 为机器学习准备文本数据

文本数据需要特殊处理,然后才能开始将其用于预测建模。

93980
来自专栏Python私房菜

用Python写算法 | 蓄水池算法实现随机抽样

现在有一组数,不知道这组数的总量有多少,请描述一种算法能够在这组数据中随机抽取k个数,使得每个数被取出来的概率相等。

19010
来自专栏阮一峰的网络日志

骰子作画的算法

程序员Scott MacDonald做了一个很有趣的项目----骰子作画。 他用黑底白点的骰子。 ? 模拟出一张人像照片。 ? 把图像放大,就可以看得更清楚。 ...

359100
来自专栏帮你学MatLab

《Experiment with MATLAB》读书笔记(四)

读书笔记(四) 这是第四部分数组与矩阵 将代码复制到m文件即可运行 函数部分需新建m文件保存 %% 向量与矩阵 x = [2; 4] % ...

383110
来自专栏技术随笔

[RNN] Simple LSTM代码实现 & BPTT理论推导

51540
来自专栏大数据风控

Python中的交叉分析pivot_table

交叉分析 通常用于分析两个或两个以上,分组变量之间的关系,以交叉表形式进行变量间关系的对比分析; 从数据的不同维度,综合进行分组细分,进一步了解数据的构成、分...

33680
来自专栏SeanCheney的专栏

Numpy和MatplotlibPython科学计算——Numpy线性代数模块(linalg)随机模块(random)Python的可视化包 – Matplotlib2D图表3D图表图像显示

Python科学计算——Numpy Numpy(Numerical Python extensions)是一个第三方的Python包,用于科学计算。这个库的前身...

65740

扫码关注云+社区

领取腾讯云代金券