- 博客(321)
- 收藏
- 关注
原创 各层的初始化。层在init中只为创建线性层,forward的对线性层中间加非线性运算。且分层定义是为了把原本一长个代码的初始化和运算放到一个组合中。
为什么要定义这么多类和forward函数呢?就是为了把一长串代码中的初始化放到整个类的初始化中,然后操作放到这个类定义的方法中。当outputs = model(images),模型被使用的时候才调用各个定义层时的forward函数,调用顺序如下,model = SimpleViT().to(device),创建模型的时候,会弄出所有层。init注意有几个层,这里有四个层,接下来在forward函数中会把这四个层都用上。
2025-08-20 23:37:50
170
原创 unfold 切图像,图形transformer的切割操作
第一次切,切高度维度,但是切完做了转置 ,得到(1,1,2,12,4)切宽度 得到 张量维度1 1 2 3 4 4 最后得到。
2025-08-20 21:30:17
139
原创 生成器,不同于正常返回的对象。比如model.named_parameters()看模型可训练参数的返回值
好的,我们把这个问题拆开,用简单例子说明和。
2025-08-19 16:22:27
283
原创 图像transformer 里面的位置编码模块
对于线性变换层,把每一个原始的块维度变大,比如变到12维,此时这个层的形状就是8*12。比如图像分成8块,每一块变成10维向量就是8*10。首先,矩阵都是分块数目*分块的size。
2025-08-19 16:18:23
89
原创 from import 引入的是类,from是文件夹下的一个python文件。init方法
下面init函数的所有东西,除了.调用函数。哪个EncoderLayers(a,b)是类的实例化.注意call方法只是对象使用的。所以这段init里面,transformer_layers文件如下。
2025-08-19 14:37:54
97
原创 调试窗口的黄蓝杠杠是什么?
2、蓝色用来表示对象里的元素,但这个元素是基础的元素对象,不是复杂对象。这样的对象,在显示的时候默认为不可展开。首先,python显示的任何东西都不叫变量,叫对象。其中item不是个复杂对象,但是一种有结构的简单对象。可见黄色杠是包含的复杂对象。
2025-08-19 14:06:32
192
原创 一般情况下,python函数都会返回对象,但有时只调用一个函数,这是在修改这个信息
所以:不返回对象的只有两种情况,1、改自己的参数值 2、改别的对象的参数值(需要传入)m.eval()是在修改m的信息。
2025-08-19 00:11:02
169
原创 在python中等号左边的都是对象,在matlab中等号a = 3+2 a就是个变量
这里 transform就调用了call方法,等号左边的tensor是一个对象。
2025-08-18 22:04:30
169
原创 二进制为什么使用记事本读取会出乱码
把高低电平用数字01表示 就读取成0-1形式,8为一个字节(即8位为一个数字0-255)就读取成8进制的形式。或者读取16个高低电平显示出来作为16进制数字(计算机读取8的整数倍(字节)电平,用来显示)高低电平是0-1,8个为一组读取成数字,再使用编码规则把数字映射成字符。文件其实都是电信号,没有真正的 0 1 数字,有的只是高低电平。
2025-08-16 22:18:12
222
原创 backward怎么计算的是torch.tensor(2.0, requires_grad=True)变量的梯度
loss.backward就会求梯度,并保存到w.grad中。自定义的类想要直接计算乘法需要写函数。
2025-08-16 13:40:37
261
原创 继承tensor的类。print还是tensor,然后多了梯度信息的原始代码表示。+变量窗口解释
super().__init__(data)和self.data是一样的,都是让其有一个data参数,第一种方法在多个参数的时候不用重新写了。花括号里的是类的名称 后面的白字是自定义的打印信息 由repr函数决定。
2025-08-15 14:11:44
155
原创 已知transformer中QKV的运算,在代码中实现比较复杂抽象,解释一下。 注意高维张量的树状图表示:无论转置还是乘积操作都可以用树状图表示,且第三个维度head(用来分成小块矩阵
qkv.view→ 把 Q/K/V 拆开成→ 拿到 q/k/v→,heads 放在前面,方便并行→ 每个 head 单独矩阵乘,得到每个 head 的矩阵都是它自己 token 间的注意力分数,不混头补充:本文出现了使用二维矩阵表示高维张量的方法,其实就是树状图,无论转置还是乘积操作都可以用树状图表示,且第三个维度head(用来分成小块矩阵)矩阵乘法后也可以用树状图表示。重要的是head在第三维度,这样才能是head分块的矩阵进行矩阵乘法。
2025-08-14 22:19:31
713
原创 为什么score矩阵要直接乘V矩阵
因为socre第一行代表第一个词对自己的关注度,和对第二个词的关注度。最好理解为,要关注第几个单词的程度。然后这个分数矩阵和V矩阵相乘就相当于行分块。在本文里,不叫单词,叫token。重点:为什么score矩阵乘V?
2025-08-14 01:37:57
106
原创 QK怎么内积的?元素横着,所以每个元素内积就要转置
Q每个最小元素都是横着的, K每个元素也都是横着的,想要Q与K每个元素都内积所以K要转置。注意Q就相当于一个矩阵,元素就是行,Q就相当于一个列向量。
2025-08-14 00:10:51
105
原创 python print 打印出来的只是描述,不是其中的量
对,你抓住重点了。当你print()一个对象(比如生成器、类实例、模型、甚至张量),,并不是对象本身的所有内容。
2025-08-13 00:31:37
380
原创 红色高亮 self
result = self.val + x # 这里self和x有时都会高亮。self.val = val # 这里调试时,self通常会红色高亮。
2025-08-12 13:42:02
122
原创 python红色高亮哪些东西?调试
print(a) # a 没定义断点处如果变量未定义,调试器显示红色提示变量错误。情况变量红色原因备注函数参数调试器语法高亮,标记输入参数正常,不代表错误覆盖内置函数名提醒潜在风险建议避免未定义变量错误提示代码需修正只读变量(常量、参数)标记为不可修改正常变量值异常提醒可能异常关注变量值如果你需要,我也可以帮你做一个演示代码和截图说明,你看怎么样?
2025-08-12 02:46:30
294
原创 python打印模型,得到的是结构,被包含的类叫做模块
class SimpleModel(nn.Module):def __init__(self):super().__init__()self.linear = nn.Linear(3, 2)def forward(self, input):return self.linear(input)model = SimpleModel()SimpleModel( (linear): Linear(in_features=3, out_features=2, bias=True))(linea
2025-08-12 02:21:59
172
原创 python打印出来的就是变量调试器里显示的东西
%%%python打印就是你看到的变量调试器里面显示的东西%%%%%print("\n模型 model 的打印结果:")print("张量 x 的打印结果:")运行结果示意(格式类似)
2025-08-12 02:15:28
390
原创 扣证件照要点
1、通道抠图总是扣出半透明的选区,这是通道头图 ctrl+通道建立选区的特性,所以一定要把通道中需要抠出来的变成黑色,背景变成白色。2、对于整个人物,将所有细节都变成黑色不现实,
2025-08-09 16:41:44
158
原创 调试的时候,单步调试会跳过库中定义的函数,但手写的并不会,可以简单理解为库文件夹被pycharm识别了,为了调试方便不进入
这种手写的,单步调试不会跳过。
2025-07-18 23:25:49
77
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人