前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在 TensorFlow 里构建神经网络来可视化高维数据

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

作者头像
AI研习社
发布2018-07-26 16:42:29
4720
发布2018-07-26 16:42:29
举报
文章被收录于专栏:AI研习社AI研习社

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-07-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI研习社 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • IDX 文件格式
  • 参考资料
相关产品与服务
NLP 服务
NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档