TensorBoard-PROJECTOR-高维向量可视化

2024-04-28 20:32

本文主要是介绍TensorBoard-PROJECTOR-高维向量可视化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

TensorBoard-PROJECTOR-高维向量可视化

 

PROJECTOR用于将高维向量进行可视化,通过PCA,T-SNE等方法将高维向量投影到三维坐标系。

具体操作和解释见代码和注释:

import tensorflow as tf
import mnist_inference
import osfrom tensorflow.contrib.tensorboard.plugins import projector
from tensorflow.examples.tutorials.mnist import input_databatch_size = 128
learning_rate_base = 0.8
learning_rate_decay = 0.99
training_steps = 10000
moving_average_decay = 0.99log_dir = 'log'
sprite_file = 'mnist_sprite.jpg'
meta_file = 'mnist_meta.tsv'
tensor_name = 'final_logits'#获取瓶颈层数据,即最后一层全连接层的输出
def train(mnist):with tf.variable_scope('input'):x = tf.placeholder(tf.float32,[None,784],name='x-input')y_ = tf.placeholder(tf.float32,[None,10],name='y-input')y = mnist_inference.build_net(x)global_step = tf.Variable(0,trainable=False)with tf.variable_scope('moving_average'):ema = tf.train.ExponentialMovingAverage(moving_average_decay,global_step)ema_op = ema.apply(tf.trainable_variables())with tf.variable_scope('loss_function'):loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y,labels=tf.argmax(y_,1)))with tf.variable_scope('train_step'):learning_rate = tf.train.exponential_decay(learning_rate_base,global_step,mnist.train.num_examples/batch_size,learning_rate_decay,staircase=True)train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss,global_step=global_step)train_op = tf.group(train_step,ema_op)with tf.Session() as sess:sess.run(tf.global_variables_initializer())for i in range(training_steps):xs,ys = mnist.train.next_batch(batch_size)_,loss_value,step = sess.run([train_op,loss,global_step],feed_dict={x:xs,y_:ys})if step % 100 == 0 :print('step:{},loss:{}'.format(step,loss_value))final_result = sess.run(y,feed_dict={x:mnist.test.images})return final_resultdef visualisation(final_result):#定义一个新向量保存输出层向量的取值y = tf.Variable(final_result,name=tensor_name)#定义日志文件writersummary_writer = tf.summary.FileWriter(log_dir)#ProjectorConfig帮助生成日志文件config = projector.ProjectorConfig()#添加需要可视化的embeddingembedding = config.embeddings.add()#将需要可视化的变量与embedding绑定embedding.tensor_name = y.name#指定embedding每个点对应的标签信息,#这个是可选的,没有指定就没有标签信息embedding.metadata_path = meta_file#指定embedding每个点对应的图像,#这个文件也是可选的,没有指定就显示一个圆点embedding.sprite.image_path = sprite_file#指定sprite图中单张图片的大小embedding.sprite.single_image_dim.extend([28,28])#将projector的内容写入日志文件projector.visualize_embeddings(summary_writer,config)#初始化向量y,并将其保存到checkpoints文件中,以便于TensorBoard读取sess = tf.InteractiveSession()sess.run(tf.global_variables_initializer())saver = tf.train.Saver()saver.save(sess,os.path.join(log_dir,'model'),training_steps)summary_writer.close()def main(_):mnist = input_data.read_data_sets('MNIST_data',one_hot=True)final_result = train(mnist)visualisation(final_result)if __name__ == '__main__':tf.app.run()

生成sprite图和meta文件:

import matplotlib.pyplot as plt
import tensorflow as tf
import numpy as np
import os
from tensorflow.examples.tutorials.mnist import input_datalog_dir = './log'
sprite_file = 'mnist_sprite.jpg'
meta_file = 'mnist_meta.tsv'def create_sprite_image(images):if isinstance(images,list):images = np.array(images)#获取图像的高和宽img_h = images.shape[1]img_w = images.shape[2]#对图像数目开方,并向上取整,得到sprite图每边的图像数目num = int(np.ceil(np.sqrt(images.shape[0])))#初始化sprite图sprite_image = np.zeros([img_h*num,img_w*num])#为每个小图像赋值for i in range(num):for j in range(num):cur = i * num + jif cur < images.shape[0]:sprite_image[i*img_h:(i+1)*img_h,j*img_w:(j+1)*img_w] = images[cur]return sprite_imageif __name__ == '__main__':mnist = input_data.read_data_sets('MNIST_data',one_hot=False)#黑底白字变成白底黑字to_visualise = 1 - np.reshape(mnist.test.images,[-1,28,28])sprite_image = create_sprite_image(to_visualise)#存储展示图像path_mnist_sprite = os.path.join(log_dir,sprite_file)plt.imsave(path_mnist_sprite,sprite_image,cmap='gray')plt.imshow(sprite_image,cmap='gray')#存储每个下标对应的标签path_mnist_metadata = os.path.join(log_dir,meta_file)with open(path_mnist_metadata,'w') as f:f.write('Index\tLabel\n')for index,label in enumerate(mnist.test.labels):f.write('{}\t{}\n'.format(index,label))
  • 如图 
    这里写图片描述

执行tensorboard –logdir=log后,浏览器打开localhost:6006,即可观察到相应结果。 
这里写图片描述

可见每个高维向量都被投影到一个三维坐标系中,同一个类别的向量彼此靠近,形成一个一个的簇,且界限明显,可见分类效果较好。

同时左边栏中还有一些可选项: 
这里写图片描述 
Label by:可以选择Label和Index,将鼠标放到相应的点上,可以显示该点的Label或者Index

Color by:可选Label和No color map,前者会根据不同的label给点赋予不同的颜色,后者不涂色,一律为黑白,如图所示。 
这里写图片描述

在下方栏中,我们还可以选择T-SNE,PCA,CUSTOM等降维方法,默认选择PCA。

T-SNE效果如图: 
这里写图片描述

在右方栏中,我们可以根据Label查找某个类,如图,我们可以找到Label为4的点。 
这里写图片描述

这篇关于TensorBoard-PROJECTOR-高维向量可视化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/944186

相关文章

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

使用Folium在Python中进行地图可视化的操作指南

《使用Folium在Python中进行地图可视化的操作指南》在数据分析和可视化领域,地图可视化是一项非常重要的技能,它能够帮助我们更直观地理解和展示地理空间数据,Folium是一个基于Python的地... 目录引言一、Folium简介与安装1. Folium简介2. 安装Folium二、基础使用1. 创建

基于Python开发PDF转PNG的可视化工具

《基于Python开发PDF转PNG的可视化工具》在数字文档处理领域,PDF到图像格式的转换是常见需求,本文介绍如何利用Python的PyMuPDF库和Tkinter框架开发一个带图形界面的PDF转P... 目录一、引言二、功能特性三、技术架构1. 技术栈组成2. 系统架构javascript设计3.效果图

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

Vector3 三维向量

Vector3 三维向量 Struct Representation of 3D vectors and points. 表示3D的向量和点。 This structure is used throughout Unity to pass 3D positions and directions around. It also contains functions for doin

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

8. 自然语言处理中的深度学习:从词向量到BERT

引言 深度学习在自然语言处理(NLP)领域的应用极大地推动了语言理解和生成技术的发展。通过从词向量到预训练模型(如BERT)的演进,NLP技术在机器翻译、情感分析、问答系统等任务中取得了显著成果。本篇博文将探讨深度学习在NLP中的核心技术,包括词向量、序列模型(如RNN、LSTM),以及BERT等预训练模型的崛起及其实际应用。 1. 词向量的生成与应用 词向量(Word Embedding)

基于SSM+Vue+MySQL的可视化高校公寓管理系统

系统展示 管理员界面 宿管界面 学生界面 系统背景   当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范化管理。这样的大环境让那些止步不前,不接受信息改革带来的信息技术的企业随时面临被淘汰,被取代的风险。所以当今,各个行业领域,不管是传统的教育行业

用Python实现时间序列模型实战——Day 14: 向量自回归模型 (VAR) 与向量误差修正模型 (VECM)

一、学习内容 1. 向量自回归模型 (VAR) 的基本概念与应用 向量自回归模型 (VAR) 是多元时间序列分析中的一种模型,用于捕捉多个变量之间的相互依赖关系。与单变量自回归模型不同,VAR 模型将多个时间序列作为向量输入,同时对这些变量进行回归分析。 VAR 模型的一般形式为: 其中: ​ 是时间  的变量向量。 是常数向量。​ 是每个时间滞后的回归系数矩阵。​ 是误差项向量,假