VIT输入维度变化

对于输入(1,3,64,64)和使用 patch size 为 8 的设置,维度变化的步骤可以总结为以下过程:

  1. 图像块的提取:

    • 使用 patch size 为 (8, 8) 将输入图像划分为图像块。
    • 维度变为(1,64,3,8,8)。
  2. 展平成向量:

    • 将每个图像块展平为长度为 8 * 8 * 3 的向量。
    • 维度变为(1,64,192)。
  3. 加入 Class Token 和 位置嵌入:

    • 添加 Class Token,将维度变为(1,65,192)。
    • 添加位置嵌入,最终维度仍为(1,65,192)。
  4. 线性投影:

    • 使用线性投影将维度投影到 d_model=1024(可变)。
    • 维度变为(1,65,1024)。
  5. transformer
    • 多头自注意力机制(Multi-Head Self-Attention):

      • 如果默认的头数是 h(通常为 12),并且头维度(head dim)是 d_h(通常为 64),则每个头产生的输出维度为(1,65,64)。
      • 线性变换得到 Q, K, V:
        • 对输入进行三个线性变换,得到Q,K,V,每个变换的权重矩阵维度为 (d_model​,d_h*h​)即(1024->12x64)。h为头的个数
        • Q 的维度为 (1,65,d_h*h​),K 的维度为 (1,65,d_h*h​),V 的维度为 (1,65,d_h*h​)。
        • 这可以用矩阵相乘的方式实现:Q=X⋅Wq​,K=X⋅Wk​,V=X⋅Wv​,其中 X 是输入张量。
      • 拆分为多头:

        • 将得到的 Q,K,V 分别拆分为 h 个头,每个头的维度为 (1,65,d_h)。
        • 这里的拆分是在最后一维上进行的。
      • 注意力计算:

        • 对每个头进行注意力计算,得到注意力分数。
        • 注意力计算包括对 Q 和 K 进行点积,然后进行缩放操作,最后应用 softmax 函数。
        • 将注意力分数乘以 V,得到每个头的注意力输出(1,65,d_h)。
      • 合并多头输出:

        • 将每个头的注意力输出按最后一维度进行连接(concatenate),得到多头注意力的输出。
        • 多头注意力的输出的维度为 (1,65,768)。这里768=h*d_h
        • 映射为(1,65,1024)
      • 加残差,维度不变(1,65,1024)
    • LayerNormalization 和 Feedforward:
      • 对于每个位置,进行 LayerNormalization 维度不变(1,65,1024)。
      • Feedforward 网络:
        • 如果默认的 Feedforward 网络的中间维度(通常为 3072)和输出维度(通常为 768):
          • 输入维度:(1,65,1024)
          • 变化为:(1,65,3072)
          • 输出维度:(1,65,1024)
      • 加残差,维度不变(1,65,1024)
  6. (1,65,1024)全局池化(1,1024)mlp输出1000类->(1,1000)

图:

  • 13
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值