工程建设与设计期刊网站,公司网站优化推广,WordPress运行时间插件,查看网站是用什么做的目录 学习式和固定式位置编码测试dropout的作用测试block深度的作用测试embeding维度大小的作用测试多头的作用测试Overlap Patch的作用 学习式和固定式位置编码测试 
主要测试无位置编码\可学习位置编码和固定式位置编码的训练效果: 其中固定式位置编码采用之前博客的正余弦位… 目录 学习式和固定式位置编码测试dropout的作用测试block深度的作用测试embeding维度大小的作用测试多头的作用测试Overlap Patch的作用 学习式和固定式位置编码测试 
主要测试无位置编码\可学习位置编码和固定式位置编码的训练效果: 其中固定式位置编码采用之前博客的正余弦位置编码 无位置编码: 
# input  input  self.pos_embed.to(input)train: epoch30, loss0.523701012134552 可学习位置编码: 
self.pos_embed  nn.Parameter(torch.zeros(1, num_patches  1, embed_dim))train: epoch31, loss0.4830354154109955 固定式位置编码: 
self.pos_embed  posemb_sincos_1d(lennum_patches  1, dimembed_dim,temperature1000).unsqueeze(0)train: epoch30, loss0.5667092204093933 目测位置编码好像没什么大作用???谁呢解释下 
dropout的作用测试 
这里主要测试attension矩阵后的dropout层. 该dropout层可以使得attension矩阵行方向随机赋0,其他除以drop概率,可以用于缓解 Vision Transformer 中的过拟合问题. 
下面测试下dropout0/0.25/0.5/0.75的训练效果. dropout0: train: epoch45, loss0.3784039616584778 val: epoch45, loss0.24934779107570648, accuracy0.9 dropout0.25: train: epoch45, loss0.38590484857559204 val: epoch45, loss0.24613243341445923, accuracy0.906 dropout0.5: train: epoch45, loss0.48613107204437256 val: epoch45, loss0.30928316712379456, accuracy0.876 dropout0.75: train: epoch45, loss0.4950393736362457 val: epoch45, loss0.36618882417678833, accuracy0.852 初步来看一定程度地dropout有利于模型收敛,但是过大就会使得其反,因此我后面开始取p0.1 
block深度的作用测试 
block作为transfomer类模型的核心组件,block的重复次数是一个超参数,直接影响到模型的深度和表达能力. 下面测试下depth分别为1/3/6/12/24的训练效果. 为了对比方便,下面我都用tensorboard可视化,为了训练快一点batch为8. depth1:  depth3:  depth6: depth12:  
实验可知:block的重复次数过低会导致模型的表达能力不够; 过高会导致训练很慢,和过拟合(验证损失更早地上升),而且当表达能力足够后准确率并不会上升太多.因此后面开始我取depth6 
embeding维度大小的作用测试 
在VIT中embeding维度可以理解为每一个图像块的编码维度 embeding维度大小和block的重复次数类似,可以直接影响到模型的表达能力. 下面测试下embeding dim分别为12/48/192/768的训练效果. embeding dim12:  
embeding dim48:  
embeding dim192:  
embeding dim768:  实验可知:embeding dim过小会导致模型的表达能力不够,具体表现为训练集损失下不去; 过大会导致训练很慢,而且当表达能力足够后准确率并不会上升太多.考虑到速度,因此后面开始我取embeding dim192. 
多头的作用测试 
Multi-Head Attention的原理是通过将模型分为多个头形成多个子空间让模型关注不同方面的信息。每个头独立进行注意力运算得到一个注意力权重矩阵。注意力矩阵完成不同块之间的交互,然后每个头之间通过cat和全连接进行交互. 下面测试下head_num分别为1/4/12/36的训练效果. 
head_num1  
head_num4  
head_num12  head_num36  
实验可知,适当的head_num可以提高模型的拟合能力,但是不是越多越好,需要根据任务的复杂情况和embeding维度去调整.本处实验其实效果不明显,可能是任务过于简单的原因. 在后面,我将会令head_num为4 
Overlap Patch的作用 
Overlap Patch指的是在切分图像为小块时允许相邻的小块之间有重叠。这种重叠可以提高图像块之间的信息交互,可能会影响模型的性能和效果。这种trick在很多transfomer网络如EfficientViT,SwimTransfomer中都有应用. 非Overlap Patch: 卷积核大小是16,stride取16,padding取0,输入为224x224时,输出为14x14  Overlap Patch: 卷积核大小是20,stride取16,padding取2,输入为224x224时,输出也为14x14,但是相邻图像块之间有2圈像素的交集.  本处实验其实效果不明显