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实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

Python 交互式可视化的利器Bokeh的使用

《Python交互式可视化的利器Bokeh的使用》Bokeh是一个专注于Web端交互式数据可视化的Python库,本文主要介绍了Python交互式可视化的利器Bokeh的使用,具有一定的参考价值,感... 目录1. Bokeh 简介1.1 为什么选择 Bokeh1.2 安装与环境配置2. Bokeh 基础2

基于Python打造一个可视化FTP服务器

《基于Python打造一个可视化FTP服务器》在日常办公和团队协作中,文件共享是一个不可或缺的需求,所以本文将使用Python+Tkinter+pyftpdlib开发一款可视化FTP服务器,有需要的小... 目录1. 概述2. 功能介绍3. 如何使用4. 代码解析5. 运行效果6.相关源码7. 总结与展望1

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较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目