ViT学习笔记

一、Embedding层

        对于标准的Transformer 模块,要求输入的是 token (向量 ) 序列,即二维矩阵 [num_token, token_dim]
        在代码实现中,直接通过一个卷积层来实现以ViT- B/16为例,使用卷积核大小为 16x16 stride 16 , 卷积核个数为768
[224, 224, 3] -> [14, 14, 768] -> [196, 768]
        在输入Transformer Encoder 之前需要加上 [class]token 以及Position Embedding ,都是可训练参数;拼接[class]token: Cat([1, 768], [196, 768]) -> [197, 768] ;叠加Position Embedding: [197, 768]-> [197, 768]
        使用位置编码效果会好一点,而使用1D,2D,相对位置编码,效果差不多
二、Transformer Encoder层
注意,在Transformer Encoder前 有个Dropout层,后有一个Layer Norm
训练 ImageNet21K 时是由 Linear+tanh激活函数 +Linear ;但是迁移到ImageNet1K 上或者你自己的数据上时,只有一个 Linear

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-03-16 06:16:06       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-16 06:16:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-16 06:16:06       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-16 06:16:06       20 阅读

热门阅读

  1. 单例模式详解

    2024-03-16 06:16:06       20 阅读
  2. springboot的自动配置原理

    2024-03-16 06:16:06       34 阅读
  3. apache和tomcat的优化总结概述

    2024-03-16 06:16:06       18 阅读
  4. 如何判断两个表的结构相同?desc t1 和desc t2

    2024-03-16 06:16:06       19 阅读
  5. SpringBoot3下Kafka分组均衡消费实现

    2024-03-16 06:16:06       21 阅读
  6. mysql 查询字段大于某长度的SQL

    2024-03-16 06:16:06       20 阅读
  7. Lua 学习

    2024-03-16 06:16:06       21 阅读