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

相关文章

【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 模型的一般形式为: 其中: ​ 是时间  的变量向量。 是常数向量。​ 是每个时间滞后的回归系数矩阵。​ 是误差项向量,假

「大数据分析」图形可视化,如何选择大数据可视化图形?

​图形可视化技术,在大数据分析中,是一个非常重要的关键部分。我们前期通过数据获取,数据处理,数据分析,得出结果,这些过程都是比较抽象的。如果是非数据分析专业人员,很难清楚我们这些工作,到底做了些什么事情。即使是专业人员,在不清楚项目,不了解业务规则,不熟悉技术细节的情况下。要搞清楚我们的大数据分析,这一系列过程,也是比较困难的。 我们在数据处理和分析完成后,一般来说,都需要形成结论报告。怎样让大

11Python的Pandas:可视化

Pandas本身并没有直接的可视化功能,但它与其他Python库(如Matplotlib和Seaborn)无缝集成,允许你快速创建各种图表和可视化。这里是一些使用Pandas数据进行可视化的常见方法: 1. 使用Matplotlib Pandas中的plot()方法实际上是基于Matplotlib的,你可以使用它来绘制各种基本图表,例如折线图、柱状图、散点图等。 import pandas

【全网最全】2024年数学建模国赛A题30页完整建模文档+17页成品论文+保奖matla代码+可视化图表等(后续会更新)

您的点赞收藏是我继续更新的最大动力! 一定要点击如下的卡片,那是获取资料的入口! 【全网最全】2024年数学建模国赛A题30页完整建模文档+17页成品论文+保奖matla代码+可视化图表等(后续会更新)「首先来看看目前已有的资料,还会不断更新哦~一次购买,后续不会再被收费哦,保证是全网最全资源,随着后续内容更新,价格会上涨,越早购买,价格越低,让大家再也不需要到处买断片资料啦~💰💸👋」�

Python利用pyecharts实现数据可视化

小编会持续更新知识笔记,如果感兴趣可以三连支持。闲来无事,水文一篇,不过上手实践一下倒还是挺好玩的,这一块知识说不定以后真可以尝试拿来做数据库的报表显示。         有梦别怕苦,想赢别喊累。 目录 前言 JSON数据格式的转换 pyecharts简介和入门使用 前言       小编我今天闲来无事,打算学习一下py,结果你猜怎么着,竟然看到py可以将数据