深度学习杂谈
文章平均质量分 72
关于深度学习训练技巧,参数,原理和实际使用时的一些心得体会
Attention is all you
关于博客任何问题尽管询问,交流也可以。技术就是在碰撞中不断累计的。
展开
-
transfomer中attention为什么要除以根号d_k
得到矩阵 Q, K, V之后就可以计算出 Self-Attention 的输出了,计算的公式如下:Attention(Q,K,V)=Softmax(QKTdk)VAttention(Q,K,V)=Softmax(\frac{QK^T}{\sqrt{d_k}})VAttention(Q,K,V)=Softmax(dkQKT)V除以维度的开方,可以将数据向0方向集中,使得经过softmax后的梯度更大.从数学上分析,可以使得QK的分布和Q/K保持一致,对于两个独立的正态分布而言,两者的加法的期望和原创 2024-06-01 16:37:47 · 1389 阅读 · 0 评论 -
BUG-ModuleNotFoundError: No module named ‘torchvision.models.utils‘
版本问题,新版本该函数在torch.hub。原创 2024-05-12 10:30:00 · 280 阅读 · 0 评论 -
Note-backbone预训练权重对模型收敛速度的影响和mmlab实验测试
在深度学习模型训练过程中,通常需要随机初始化神经网络的参数。然而,如果采用Backbone预训练权重进行初始化,模型就能从一个已经学习过大量数据的权重开始,而不是从零开始。这可以大大提高模型在初始阶段的性能,因为它已经具备了一定的特征提取能力。:由于Backbone预训练权重已经包含了大量的通用特征表示,这些特征表示对于许多计算机视觉任务都是有用的。因此,当使用这些预训练权重进行模型训练时,模型可以更快地适应新的任务,并加速收敛。原创 2024-05-06 10:30:00 · 245 阅读 · 0 评论 -
Note-模型的特征学习过程分析
将数据的特征分为,有用特征和无用特征(噪声).有用特征与任务有关,无用特征与任务无关.模型的学习过程就是增大有用特征的权重并减少无用特征的权重的过程.ya0x0a1x1loss0.5∗ylabel−y2dlossdyy−ylabeldlossdadlossdy∗dyday−ylabel∗xanextaηylabe。原创 2024-04-06 14:21:32 · 1241 阅读 · 0 评论 -
Vision Transfomer系列第二节---复现过程的Bugs记录
1.transfomer模型的训练收敛速度确实很慢,一个分类就需要训练好很多个epoch (花分类45epochs左右)2.所以说看懂原理和代码还是远远不够的,复现起来还是有很多细节需要注意的,确实是纸上学来终觉浅,绝知此事要躬行。原创 2024-02-06 00:09:57 · 919 阅读 · 0 评论 -
Note-归一化层和前向源码
深度学习中常见的归一化层包括批量归一化(Batch Normalization)、层归一化(Layer Normalization)、实例归一化(Instance Normalization)、组归一化(Group Normalization)。批量归一化(Batch Normalization):BN专注于标准化任何特定层的输入(即来自先前层的激活)。标准化输入意味着网络中任何层的输入应具有大约为零的均值和单位方差。原创 2024-01-29 22:57:44 · 948 阅读 · 0 评论 -
Note-模型复杂度分析和mmlab实验测试
(floating-point operations per second)的缩写。“每秒浮点运算次数”,“每秒峰值速度”是“每秒所执行的浮点运算次数”。它常被用来估算电脑的执行效能,尤其是在使用到大量浮点运算的科学计算领域中。正因为FLOPS字尾的那个S,代表秒,而不是复数,所以不能省略掉。:乘加次数,计算量对应时间复杂度flopscovh∗w∗k2∗cin∗coutflopsdownsample0flop。原创 2024-01-28 21:45:37 · 907 阅读 · 0 评论 -
Note-python的深浅拷贝
在Python中,对象的拷贝可以是浅拷贝(shallow copy)或深拷贝(deep copy),这两者之间的主要区别在于它们处理复合对象(如列表、字典或其他包含其他对象的对象)的方式不同。浅拷贝会创建一个新对象,但这个新对象包含的是对原始对象中元素的引用,而不是元素本身的拷贝。因此,如果原始对象中的元素是可变的,并且在新对象或原始对象中修改了这些元素,那么这些更改将反映在另一个对象中,因为它们引用的是相同的对象。原创 2024-01-27 22:25:13 · 422 阅读 · 0 评论 -
Note-transfomer的位置编码
在transformer的encoder和decoder的输入层中,使用了Positional Encoding,使得最终的输入满足:这里,input_embedding的shape为[n,b,embed_dim],positional_encoding和input_embedding形状一致.原创 2024-01-16 23:57:30 · 1079 阅读 · 0 评论 -
博客知识库
第i个元素就是第i个通道上全部batch张输出特征图所有元素的平均值和方差,所shape就是特征图shapeweight和bias分别对应 γ,β.有bn时cov可以不用bia在训练过程中,mean和std是统计得到的,然后在迭代过程中动态累加,m*si-1+(1-m)*si,m为历史保留比,对应pytorch的momenta参数,test过程中使用训练过程的统计结果。原创 2024-01-08 23:50:29 · 719 阅读 · 0 评论 -
方法-PC端远程调试分布式训练
一些简单的代码我们使用Pycharm本地调试就能运行成功,但在诸如使用GPU进行分布式训练和推断等场景中,由于我们本地的电脑没有GPU或者没有多块GPU而无法运行这些程序。如果此时我们手头恰好有自己/公司/学校的GPU服务器资源,我们就可以使用这些GPU服务器进行远程调试/运行,无需本地运行代码。原创 2023-12-13 14:58:39 · 453 阅读 · 0 评论 -
问题:batchnormal训练单个batch_size就会报错吗
Batch Normalization在每个batch_size为1的情况下是可以正常工作的。标准的Batch Normalization通常使用较大的batch_size,这样可以更好地估计总体分布,加速收敛,并减少内部协变量偏移的问题。然而,当batch_size为1时,Batch Normalization的效果可能会降低,因为它失去了批处理的优点,比如能够更好地估计网络输入的总体分布。在标准的神经网络训练中,每一层的输入分布都会随着训练的进行而发生变化,这使得网络训练变得困难。原创 2023-12-08 17:29:49 · 634 阅读 · 0 评论 -
BUG-Expected more than 1 value per channel when training, got input size torch.Size([1, xxx, 1, 1])
当size=Size([1, xxx, 1, 1]), size_prods是size[0] * size[2] * size[3]当size=Size([1, xxx]), size_prods是size[0]1.优先建议,调整输入尺寸或者网络结构使得 size[2]和size[3]不为1。上面的size是Size([1, xxx, 1, 1])2.方法1如果不能用,则batch_size改成大于1。就可以,这就是为什么网上通用解释都是这个.因此,为了避免这个错误,我们把。原创 2023-12-08 17:27:50 · 674 阅读 · 0 评论 -
方法-TensorBoard如何在PC端远程可视化服务器的训练结果
TensorBoard 是 TensorFlow 的可视化工具,可以帮助用户实时监控深度神经网络的训练过程,基于PyTorch的训练过程也可以可视化。假设我在服务器上进行模型的训练,并记录下summary,此时需要进行可视化相关的曲线或者plot图.如果服务器没有可视化外设,那么就只能在本机进行远程可视化了,具体方法如下.原创 2023-12-07 20:27:21 · 658 阅读 · 0 评论 -
技巧-GPU显存和利用率如何提高和batch_size/num_works等参数的实验测试
在PyTorch中使用多个GPU进行模型训练时,各个参数和指标之间存在一定的关系。GPU显存是限制模型训练规模的关键因素。当使用多个GPU进行训练时,每个GPU都会分配一部分显存用于存储中间变量、梯度、权重等。GPU显存的使用量取决于模型的复杂度、批量大小(batch size)以及数据类型等因素。举例:假设我们使用两个GPU(GPU 0和GPU 1)进行训练,每个GPU的显存为12GB。若批量大小为32个样本,模型复杂度为中等,则每个GPU可能需要大约4GB的显存。原创 2023-11-30 20:02:29 · 7843 阅读 · 4 评论 -
方法-进程已经杀死但是显存还未释放怎么办(ubuntu)
训练程序ctrl+c后,依然显示显存占用。##查看后台的训练进程。原创 2023-11-30 13:51:51 · 1193 阅读 · 0 评论 -
技巧-PyCharm中Debug和Run对训练的影响和实验测试
在训练深度学习模型时,使用PyCharm的Debug模式和Run模式对训练模型的耗时会有一些区别。Debug模式:Debug模式在训练模型时,会对每一行代码进行监视,这使得CPU的利用率相对较高。由于需要逐步执行、断点调试、查看变量值等操作,Debug模式会使得训练过程更加耗时。然而,这种模式对于调试模型和查找错误非常有帮助。Run模式:Run模式在训练模型时,专注于执行训练过程,这使得GPU的利用率相对较高。由于不需要在运行时进行交互操作,Run模式的执行速度通常会比Debug模式快一些。原创 2023-11-29 10:00:09 · 1072 阅读 · 2 评论 -
技巧-PyTorch中num_works的作用和实验测试
在 PyTorch 中,num_workers 是 DataLoader 中的一个参数,用于控制数据加载的并发线程数。它允许您在数据加载过程中使用多个线程,以提高数据加载的效率。具体来说,num_workers 参数指定了 DataLoader 在加载数据时将创建的子进程数量。当 num_workers 大于 0 时,DataLoader 会自动利用多个子进程来加速数据加载。这有助于减少主进程的等待时间,并使得数据加载更加并行化。原创 2023-11-28 20:12:04 · 1644 阅读 · 0 评论