ViT 学习笔记
伙伴们好,这几个礼拜坚持写周报、跑会、写会议纪要、读书及读书笔记。
2025 年 6 月 21 日于华东师范大学数据科学与工程研究院研究生学术沙龙第 43 期,正好学习到计算机视觉领域的 Transformer,即 Vision Transformer,简称 ViT。
点击《华师大第 43 期研究生学术沙龙 》,获取更多信息。
[ 2.7182817 20.085537 54.59815 ]
关于 np.repeat(), np.tile()
array([[0],
[0],
[1],
[1],
[2],
[2]])
关于 np.arange()
array([[95, 96],
[97, 98]])
关于 np.pad()
array([[ 0, 0, 0, 0],
[ 0, 95, 96, 0],
[ 0, 97, 98, 0],
[ 0, 0, 0, 0]])
这些函数主要为了看懂第四篇文献,暂时看懂程度一般。先放一放。
参考文献
[1] Intel Pentium CPU计算加减乘除的指令周期,博客园,2014
[2] 乘法和加法运算所需的时钟周期,腾讯云,2022
[3] 测试运算所需时钟周期数,CSDN,2018
[4] 【python实现卷积神经网络】卷积层Conv2D实现(带stride、padding),博客园,2020
2025 年 6 月 21 日于华东师范大学数据科学与工程研究院研究生学术沙龙第 43 期,正好学习到计算机视觉领域的 Transformer,即 Vision Transformer,简称 ViT。
点击《华师大第 43 期研究生学术沙龙 》,获取更多信息。
01 一些简单的 numpy 函数
关于 TF 变量
import tensorflow as tf
tf.compat.v1.disable_eager_execution()
# 每个 passage 之前都要用,处理 placeholder 传导的
a = tf.constant([1,3,4])
a = tf.cast( a, tf.float32 )
b = tf.exp(a)
with tf.compat.v1.Session() as sess:
print( sess.run( b ) )
关于 np.repeat(), np.tile()
import numpy as np
import pandas as pd
a = np.repeat( np.arange(3), 2 )
b = np.tile( [0,0,0,1,1,1,2,2,2], 3 )
c = a.reshape(-1,1) # 变成 2d
d = c.reshape(-1,1)
d
[0],
[1],
[1],
[2],
[2]])
关于 np.arange()
e = np.arange(95,99).reshape(2,2) #原始输入数组
e
[97, 98]])
关于 np.pad()
np.pad(e,((1,1),(1,1)),'constant',constant_values = (0,0))
# np.pad(obj, ((up, bottom),(left, right)), 'constant', constant_values=(0,0) )
[ 0, 95, 96, 0],
[ 0, 97, 98, 0],
[ 0, 0, 0, 0]])
这些函数主要为了看懂第四篇文献,暂时看懂程度一般。先放一放。
参考文献
[1] Intel Pentium CPU计算加减乘除的指令周期,博客园,2014
[2] 乘法和加法运算所需的时钟周期,腾讯云,2022
[3] 测试运算所需时钟周期数,CSDN,2018
[4] 【python实现卷积神经网络】卷积层Conv2D实现(带stride、padding),博客园,2020
02 关于手写 Conv2D
(1)如何手写 conv2D,从第一篇文献来看,是嵌入前传和和后传每一层网络。
(2)这篇是 知乎-pizh12thu 的文章,解释了卷积的原理,以及卷积消耗硬件计算资源的原因。
离散形式的卷积,计算如下。
![]()
(3)Halide 和 GEMM
![]()
左边是横向 concatenate,右边是纵向 concatenate,注意,不仅仅是卷积之后的元素是列向量优先,而且 RGB 三个矩阵也是纵向拼接。
![]()
举个例子,N 样本量,C 通道,H 高度,W 宽度。
NCHW 通道置于长宽之前,按矩阵,即矩阵 R、矩阵 G、矩阵 B。
NHWC 通道置于长宽之后,RGB、RGB、RGB ……
![]()
关于参考文献(1),主要讨论不干预情况下,每秒处理FLOP 随着矩阵维度增加的变化。以及若干种改进之后的情形。实验包括:
(a) reorder(ijk->ikj),
(b) tile-vec(SIMD),
(c) parallel(threading 将一个任务自分多线程),
(d) unroll(比如检查循环终止、更新循环计数器、指针算法等。相反,如果我们手工编写重复循环语句并展开循环,我们可以减少这种开销),
(e) halide(c++中的一种嵌入式语言,用来帮助编写快速图像处理代码。通过分解算法和计划,可以更容易地试验不同的优化。我们可以保持算法不变,并使用不同的策略)。
![]()
离散形式的卷积,计算如下。

(3)Halide 和 GEMM

左边是横向 concatenate,右边是纵向 concatenate,注意,不仅仅是卷积之后的元素是列向量优先,而且 RGB 三个矩阵也是纵向拼接。

举个例子,N 样本量,C 通道,H 高度,W 宽度。
NCHW 通道置于长宽之前,按矩阵,即矩阵 R、矩阵 G、矩阵 B。
NHWC 通道置于长宽之后,RGB、RGB、RGB ……

关于参考文献(1),主要讨论不干预情况下,每秒处理FLOP 随着矩阵维度增加的变化。以及若干种改进之后的情形。实验包括:
(a) reorder(ijk->ikj),
(b) tile-vec(SIMD),
(c) parallel(threading 将一个任务自分多线程),
(d) unroll(比如检查循环终止、更新循环计数器、指针算法等。相反,如果我们手工编写重复循环语句并展开循环,我们可以减少这种开销),
(e) halide(c++中的一种嵌入式语言,用来帮助编写快速图像处理代码。通过分解算法和计划,可以更容易地试验不同的优化。我们可以保持算法不变,并使用不同的策略)。

浙公网安备 33010602011771号