绘制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 os
 
 
def 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 pd
    tsne = TSNE(n_components=2, init='pca', random_state=0)
    import seaborn as sns
 
    #查看标签的种类有几个
    class_num = len(np.unique(labels))  # 要分类的种类个数  eg:[0, 1, 2, 3]这个就是为4
    
    try:
        tsne_features = tsne.fit_transform(features)  # 将特征使用PCA降维至2维
    except:
        tsne_features = tsne.fit_transform(features)
    
    #一个类似于表格的数据结构
    df = pd.DataFrame()
    df["y"] = labels
    df["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.target
    print(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:。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【spring】@PathVariable注解学习

PathVariable介绍 PathVariable是Spring框架中的一个注解,主要用于处理RESTful风格URL中的路径变量。在RESTful接口设计中,我们经常将资源的ID或者其他标识信息直接放在URL路径中,而不是作为查询参数。PathVariable注解使得控制器方法能够轻…

【Linux】如何优雅的检查Linux上的用户登录、关机和重启日志

在诸如Ubuntu、Debian、Linux Mint、Fedora和Red Hat等广受欢迎的Linux发行版中,系统会忠实记录用户的登录、关机、重启以及运行时长信息。这些信息对管理员调查事件、排查故障或汇总用户活动报告极为宝贵。 Linux系统及应用程序日志通常保存在/var/log/目录下&…

RuoYI框架集成Sqlite与Mybatis-plus

一、RuoYi 中集成 SQLite 、MyBatis-Plus RuoYi 是一个基于 Spring Boot 的权限管理系统,它默认使用 MySQL 作为数据库。如果你想在 RuoYi 中集成 SQLite 数据库,并使用 MyBatis-Plus 作为 ORM 框架,你需要进行一些配置和代码更改。以下是集成的基本步骤: 添加依赖:在项目…

Java进阶学习笔记19——内部类

1、 内部类: 是类中五大成分之一(成员变量、方法、构造函数、内部类、代码块),如果一个类定义在另一个 类的内部,这个类就是内部类。 场景:当一个类的内部,包含了一个完整的事物,且…

Linux服务升级:Predixy 升级代理 Redis-cluster 集群

目录 一、实验 1.环境 2. 启动Redis服务 3.Predixy 升级代理 Redis-cluster 集群 二、问题 1. Predixy进行set操作报错 2.如何创建脚本启动predixy 3.Redis代理对比 一、实验 1.环境 (1)主机 表1 主机 系统版本节点软件IP备注CentOS7.9Redis…

JavaFX学习教程二

一、JavaFX 体系结构 JavaFX 场景图(Scene Graph)是构建 JavaFX 应用程序的起点,一种树状数据结构,用于排列(和分组)图形对象,以便于逻辑表示。 stage:舞台,操作系统窗口的 JavaFX 表示,是所有…

网络编程的基础知识(适合新手)

网络编程 在Java中,网络编程是指使用Java语言进行网络通信的编程技术。这种技术使得位于不同地理位置的计算机能够通过网络进行通信,实现资源共享和信息传递。 一、定义 Java网络编程是Java语言在网络通信方面的应用,它利用Java提供的网络…

恢复Android数据的综合指南:适用于Android的数据恢复工具

随着存储空间的快速增长,智能手机已成为我们最可靠的个人数据库。我们的 Android 手机不亚于我们自己的延伸,包含各种重要文件、照片、文档、视频、联系人、通话记录等等。由于这些智能 Android 设备上存储了如此多有价值的信息,意外删除或丢…

Java进阶学习笔记22——泛型方法、通配符和上下限

泛型方法: package cn.ensource.d11_generics_method;public class Test {public static void main(String[] args) {// 泛型方法String res test("Java");System.out.println(res);Dog dog1 test(new Dog());System.out.println(dog1);}// 泛型方法pub…

常用API(正则表达式、爬取、捕获分组和非捕获分组 )

1、正则表达式 练习——先爽一下正则表达式 正则表达式可以校验字符串是否满足一定的规则,并用来校验数据格式的合法性。 需求:假如现在要求校验一个qq号码是否正确。 规则:6位及20位之内,0不能在开头,必须全部是数字…

一文了解 - GPS/DR组合定位技术

GPS Global Position System 全球定位系统这个大家都很熟悉, 不做太多介绍。 DR Dead Reckoning 车辆推算定位法, 一种常用的辅助的车辆定位技术。 DR系统的优点: 不需要发射和接收信号; 不受电磁波干扰。 DR系统的缺点&#x…

SVM兵王问题

1.流程 前面六个就是棋子的位置,draw就是逼和,后面的数字six就代表,白棋最少用六步就能将死对方。然后呢,可以看一下最后一个有几种情况: 2.交叉测试 leave one out: 留一个样本作测试集,其余…

精品PPT | 精益生产管理中MES系统的实现与应用(免费下载)

【1】关注本公众号,转发当前文章到微信朋友圈 【2】私信发送 MES系统的实现与应用 【3】获取本方案PDF下载链接,直接下载即可。 如需下载本方案PPT/WORD原格式,请加入微信扫描以下方案驿站知识星球,获取上万份PPT/WORD解决方案&…

深入理解 Spring Web 应用程序初始化流程

前言 在构建基于 Spring 的 Web 应用程序时,了解初始化流程是至关重要的。本文将详细介绍 Servlet 容器的初始化过程,并重点探讨 Spring 框架在其中的作用,特别是 ServletContainerInitializer、SpringServletContainerInitializer 和 WebAp…

2024年软考总结 信息系统管理师

选择题 英文题,我是一题也没把握,虽然我理解意思。 千万不要认为考死记硬背不对。目的不在于这。工程项目中有很多重要的数字,能记住说明你合格。 案例 几乎把答案全写在案例中了。 计算题 今年最简单。没有考成本。 只考了关键路径&a…

微信小程序毕业设计-智慧旅游平台系统项目开发实战(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计…

RAG技术综述

RAG的基本架构。,生成器和检索器。 参考paper:https://arxiv.org/html/2402.19473v4 文中将rag的内容从文本扩展至多模态,打开了思路。 生成器:transformer,LSTM,扩散模型,gan 检索器&#xf…

Sourcetree安装教程及使用

1 Sourcetree介绍 Sourcetree是一款免费的Git图形化客户端,它由Atlassian开发,提供了跨平台的支持,可运行在Windows和Mac操作系统上。Sourcetree可以让开发者更方便地使用Git来管理代码,不需要在命令行中输入复杂的Git命令&#x…

【强训笔记】day25

NO.1 思路&#xff1a;哈希质数判断。 代码实现&#xff1a; #include <iostream> #include<string> #include<cmath> using namespace std;bool isprime(int n) {if(n<2) return false;for(int i2;i<sqrt(n);i){if(n%i0) return false;}return true…

Python筑基之旅-运算符

目录 一、运算符 1、了解定义 2、理解意义 2-1、基本数据处理 2-2、条件判断 2-3、逻辑操作 2-4、赋值和更新 2-5、位操作 2-6、提高代码可读性 2-7、解决实际问题 2-8、学习其他编程语言的基础 3、探索方法 3-1、理解概念 3-2、练习基本运算 3-3、掌握优先级 …