当前位置: 首页 > news >正文

ViT实战二:Cls token

前言

本文是针对这两篇博文代码的理解

基于BERT里的[CLS] Token在Pytorch里是如何实现的,引出对Torch的视图View和扩展视图expand的理解-CSDN博客

CV攻城狮入门VIT(vision transformer)之旅——VIT原理详解篇-CSDN博客

里面有下列代码

self.cls_token = nn.Parameter(torch.randn(1, 1,embedding_size))  
expand_cls_token = self.cls_token.expand(x.size(0), -1,-1)  # 将cls_token的第一维度batch_size的大小“扩充”为和x一样的batch_size(x_batch_size,1,embedding_size),-1 means not changing the size of that dimensionx = torch.cat((expand_cls_token, x), dim=1) # cls_token与x拼接,cls_token放置在Sequence序列的首位,所以dim=1

原文对于view和expand已经描述的比较详细了,这里我重点讲一下我的理解

CLS的理解

因为我们的目标是进行分类,按照CNN的思想,每张图片都要有一个判别概率,在传统CNN中,我们是利用softmax取最大值,但是在这里,我们使用class token来进行"代表",即这一个多出来的部分就是这张图片的预测结果

从实际应用角度出发,cls加了一共全局的信息,可以在反向传播中接收来自模型反馈的梯度值(因为我们最开始初始化为全0,相当于给我们ViT展平后的向量增加一点空间用于接收反向传播的信息),所以也就有代码中的:

  1. nn.Parameters,将这向量初始化为模型可训练的参数
  2. torch.cat,表示直接将向量进行连接而不是进行加和,因为这部分的向量值初始化后无意义,作用就是让模型通过反向传播给它赋值,成为有意义的值

下面这张图可以比较明了表示我的理解,为了方便理解,我假设了一个中间过程,每个子图加上个cls头,但是实际应该没有这个过程,从博文的代码中可以知道,实际是在展平后的子图上直接加上蓝色长方形的部分

http://www.dtcms.com/a/442094.html

相关文章:

  • AI + 制造:从技术试点到产业刚需的 2025 实践图鉴
  • JVM内存模型剖析
  • 山东网站制作哪家好网站优化方案和实施
  • 工作中使用到的单词(软件开发)_第五版
  • Vue3 Router高级用法—菜单动态渲染
  • 西安seo网站排名优化公司网站快速推广排名技巧
  • LeetCode算法日记 - Day 62: 黄金矿工、不同路径III
  • 济南建设工程信息网站asp.net实用网站开发
  • deepseek 的对话json导出成word和pdf
  • php 网站 项目如何用wordpress搭建个人博客
  • Prometheus监控K8S集群-ExternalName-endpoints-ElasticStack采集K8S集群日志实战
  • 解读DeepSeek-V3.2-Exp:基于MLA架构的Lightning Index如何重塑长上下文效率
  • 视频网站开发公司有哪些公司国家新闻出版
  • GitHub 热榜项目 - 日榜(2025-10-04)
  • datawhale RAG技术全栈指南 202509 第6次作业
  • 电影网站建设成本百怎么做网站
  • e语言可以做网站吗西安网站建设 翼驰
  • Redis 热点数据与冷数据解析
  • 【计算机视觉】车牌分割定位识别
  • wordpress做网站容易吗用lls建设一个网站
  • 从 3.6 亿订单表到毫秒级查询:分库分表指南
  • 网站怎样设计网页做黄金期货的网站
  • 无线网卡——WIFI7无法在Ubuntu22.04系统中使用
  • Ubuntu20.04下的Pytorch2.7.1安装
  • MySQL:C语言链接
  • 合肥市门户网站中国纪检监察报社长
  • 黑马点评秒杀优化和场景补充
  • 嵌入式硬件——基于IMX6ULL的UART(通用异步收发传输器)
  • Spark Shuffle:分布式计算的数据重分布艺术
  • 网站能看出建设时间吗网页设计工资统计