绘制t-SNE图

什么是t-SNE图?

如下图,下图来源于论文Contrastive Clustering
在这里插入图片描述一般用于分类问题/对比学习。

作用?

体现出经过层层训练,类内越来越紧密,类间差异越来越大;或者也可以做消融可视化。

怎么画?

以下是一个手写数字的例子,转载自添加链接描述

import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt_sne
from sklearn import datasets
from sklearn.manifold import TSNE
import osdef plot_tsne(features, labels, epoch,fileNameDir = None):'''features:(N*m) N*m大小特征,其中N代表有N个数据,每个数据m维label:(N) 有N个标签'''print(features.shape,labels.shape)print(type(features),type(labels))print(np.any(np.isnan(features)),np.any(np.isinf(features)))features = np.nan_to_num(features)if not os.path.exists(fileNameDir):os.makedirs(fileNameDir)import pandas as pdtsne = TSNE(n_components=2, init='pca', random_state=0)import seaborn as sns#查看标签的种类有几个class_num = len(np.unique(labels))  # 要分类的种类个数  eg:[0, 1, 2, 3]这个就是为4try:tsne_features = tsne.fit_transform(features)  # 将特征使用PCA降维至2维except:tsne_features = tsne.fit_transform(features)#一个类似于表格的数据结构df = pd.DataFrame()df["y"] = labelsdf["comp1"] = tsne_features[:, 0]df["comp2"] = tsne_features[:, 1]# hue:根据y列上的数据种类,来生成不同的颜色;# style:根据y列上的数据种类,来生成不同的形状点;sns.scatterplot(x= df.comp1.tolist(), y= df.comp2.tolist(),hue=df.y.tolist(),style = df.y.tolist(),palette=sns.color_palette("Set2",class_num),data=df).set(title="T-SNE projection")plt_sne.savefig(os.path.join(fileNameDir,"%s.jpg") % str(epoch),format = "jpg")plt_sne.show()if __name__ == '__main__':digits = datasets.load_digits(n_class=2)features, labels = digits.data, digits.targetprint(features.shape)print(labels.shape)plot_tsne(features, labels, "Set2", fileNameDir="test")

在真正用在代码中时,可以像下面一样。

首先,我们需要导入一些必要的库:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.manifold import TSNE

然后,我们可以在训练循环的最后添加以下代码:

if epoch == 1:# 获取所有样本的特征向量all_features = []all_labels = []for inputs_x, targets_x in labeled_trainloader:if use_cuda:inputs_x = inputs_x.cuda()_, features, *_ = model(inputs_x)all_features.append(features.detach().cpu().numpy())all_labels.append(targets_x.numpy())all_features = np.concatenate(all_features, axis=0)all_labels = np.concatenate(all_labels, axis=0)# 计算 t-SNE 嵌入tsne = TSNE(n_components=2, random_state=42)X_tsne = tsne.fit_transform(all_features)# 绘制 t-SNE 图plt.figure(figsize=(10, 10))plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=all_labels, cmap='tab10')plt.colorbar()plt.title('t-SNE Visualization (Epoch 1)')plt.savefig('tsne_epoch_1.png')plt.close()

这段代码会在第一个 epoch 结束后,获取所有标记样本的特征向量,并使用 t-SNE 算法将它们映射到二维空间。然后,它会绘制一个彩色散点图,并保存为 tsne_epoch_1.png。

请注意,这只会在第一个 epoch 结束后执行一次,因为我们只想看到初始的 t-SNE 图。如果您想要在每个 epoch 结束后都绘制 t-SNE 图,可以将 if epoch == 1: 改为 if True:。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/15914.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vim操作手册

vim分为插入模式、命令模式、底行模式。 插入模式:编辑模式 命令模式:允许使用者通过命令,来进行文本的编辑控制 底行模式:用来进行让vim进行包括但不限于shell进行交互 w:保存 wq&am…

SwiftUI中的Stepper(系统Stepper以及自定义Stepper)

本篇文章主要介绍一下Stepper,这个组件在UIKit中也已经有较长的历史了,下面看看在SwiftUI中如何使用,有哪些更加便捷的方法呢? Stepper减号(-)和加号()按钮,可以点击后以指定的数值进行加减。 基础初始化方法 Stepp…

【动态规划】斐波那契数列模型(C++)

目录 1137.第N个泰波那契数 解法(动态规划) 算法流程 1. 状态表⽰: 2. 状态转移⽅程: 3. 初始化: 4. 填表顺序: 5. 返回值: C算法代码 优化: 滚动数组 测试: …

HP Laptop 15s-fq2xxx,15s-fq2706TU原厂Win11系统镜像下载

惠普星15青春版原装Windows11系统,恢复出厂开箱状态oem预装系统,带恢复重置还原 链接:https://pan.baidu.com/s/1t4Pc-Q0obApLkG8o_9Kkkw?pwdduzj 提取码:duzj 适用型号:15s-fq2xxx,15s-fq2000 15s-f…

ROS2入门21讲__第19讲__Rviz:三维可视化显示平台

目录 前言 Rviz三维可视化平台 Rviz介绍 运行方法 彩色相机仿真与可视化 仿真插件配置 运行仿真环境 图像数据可视化 三维相机仿真与可视化 仿真插件配置 运行仿真环境 点云数据可视化 激光雷达仿真与可视化 仿真插件配置 运行仿真环境 点云数据可视化 Rviz v…

月薪5万是怎样谈的?

知识星球(星球名:芯片制造与封测技术社区,星球号:63559049)里的学员问:目前是晶圆厂的PE,但是想跳槽谈了几次薪水,都没法有大幅度的增长,该怎么办?“学得文武…

联想单机游戏联运SDK接入攻略

1. 接入流程 本文档主要介绍了联想单机游戏SDK接入流程、联想游戏提供的功能等。 1.1. 接入方式 1. 联想单机游戏SDK1.0版本支持“账号防沉迷”接入方式; a. 联想提供账号注册、登录等能力 b. 联想判断账号是否购买游戏,提供游戏支付购买能力 c. 联…

RobotFramework测试框架(13)--内置测试库

Builtln Evaluate方法 Evaluate。它可以做很多事情,主要的作用是可以直接调用Python的方法 一般用Evaluate都是前面放变量接收值,第三列是具体的运算表达式,第四列是要用到的Python的module。这里就是用random来进行一个随机数的生成 Cons…

基础6 探索JAVA图形编程桌面:集合组件详解

我们的团队历经了数不胜数的日夜,全力以赴地进行研发与精心调试,最终成功地推出了一款具有革命性意义的“图形化编程桌面”产品。这款产品的诞生,不仅极为彻底地打破了传统代码开发那长久以来的固有模式,更是把焦点聚集于解决长期…

Redis教程(十五):Redis的哨兵模式搭建

一、搭建Redis一主二从 分别复制三份Redis工作文件夹,里面内容一致 接着修改7002的配置文件,【redis.windows-service.conf】 port 7002 改成 port 7002 slaveof 127.0.0.1 7001 7003也同样修改 port 7003 slaveof 127.0.0.1 7001 这样就指定了700…

浅析FAT32文件系统

本文通过实验测试了FAT文件系统的存储规律,并且探究了部分可能的文件隐藏方法。 实验背景 现有一块硬盘(U盘),其中存在两个分区,分别为FAT32和NTFS文件系统分区。 在FAT分区中存在如下文件: 现需要阅读底…

决策控制类软件项目的团队配置

决策控制类软件项目的团队配置怎样才是最合适的?目的就是实现高效的项目协作以及为企业降本增效。软件项目的主要费用来源是研发人员的开支以及差旅费用。 下面的思维导图从项目与产品的关系、团队架构、项目成员配置、项目可复制性、招聘这几点进行说明如何组织人…

六招搞定,SPA单页面加载速度慢的问题。

众所周知,SPA页面有很多优点,但是首屏加载慢的问题一直被诟病,本文介绍几种解决策略,希望对老铁们有所帮助。 一、SPA页面的独有优势 1. 更快的用户体验: SPA在加载初始页面后,可以在用户与应用程序交互…

抖音小店怎么对接达人合作?五种方法分享,合作成功率超级高!

大家好,我是电商糖果 有很多刚开店的小店商家,经常会出现一个问题。 那就是不会找达人合作,有的朋友说是因为他社恐,还有的说达人不好沟通等等。 理由有很多,总结下来就是找达人合作这事儿太难了,干不了…

ros2编写pcl节点加载pcd文件

初次学习ros2和pcl,尝试在ros2中创建节点,加载pcd文件,并在rviz中进行可视化,记录一下整个过程。 编辑环境 ubuntu20.04 ros2_foxy 创建节点 mkdir -p proj_ws_pcl/src #创建工程文件夹 cd proj_ws_pcl/src #创建源码文件夹 …

labview_开放协议

一、开放协议 二、硬件设置 英格索兰硬件设置: 三、配套测试软件 四、Labview代码

文心智能体大赛:百度文心智能体平台初体验

写在前面 博文内容涉及:文心智能体大赛:文心智能体初体验理解不足小伙伴帮忙指正 😃,生活加油 我徒然忘记了热闹,却来不及悟透真正的清冷(《四喜忧国》) 前言 徒然忘记了热闹,却来不及悟透真正的清冷(《四喜忧国》),在…

记一次MySQL执行修改语句超时问题

异常问题 原因分析 这个问题发生在开发环境,怀疑是提交事务时终止项目运行,没有提交该事务,造成死锁 调试该事务时时间太长,为什么说有这个原因呢,因为通过查找日志显示 The client was disconnected by the server …

Java面试八股之什么是锁消除和锁粗化

什么是锁消除和锁粗化 锁消除(Lock Elimination): 锁消除是Java虚拟机(JVM)进行的一种高级优化策略,旨在消除那些没有必要存在的同步操作,以减少不必要的性能开销。这一优化发生在即时编译器&a…

求两个整数最大公约数的方法

可以使用递归来实现,编写gcd函数返回最终的结果(最大公约数)。传入两个参数,如果存在一个数字不大于0就返回0,利用上面的公式就可以得出最后的结果。