- 博客(69)
- 收藏
- 关注
原创 理解optimizer.zero_grad(), loss.backward(), optimizer.step()的作用及原理
函数会遍历模型的所有参数,通过p.grad.detach_()方法截断反向传播的梯度流,再通过p.grad.zero_()函数将每个参数的梯度值设为0,即上一次的梯度记录被清空。因为训练的过程通常使用mini-batch方法,所以如果不将梯度清零的话,梯度会与上一个batch的数据相关,因此该函数要写在反向传播和梯度下降之前。
2024-08-22 20:08:45
96
原创 【pytorch】固定(freeze)住部分网络
https://blog.csdn.net/jningwei/article/details/120300014
2024-08-22 20:07:19
140
原创 model.train()和model.eval()的区别
训练模式(Training Mode):如表格所示,在此模式下,模型会进行前向传播、反向传播以及参数更新。某些层,如Dropout层和BatchNorm层,在此模式下的行为会与评估模式下不同。评估模式(Evaluation Mode):如表格所示,在此模式下,模型只会进行前向传播,不会进行反向传播和参数更新。Dropout层会停止dropout,BatchNorm层会使用在训练阶段计算得到的全局统计数据,而不是测试集中的批统计数据。
2024-08-22 20:05:08
236
原创 model.eval()和torch.no_grad()的区别
在评估模式下,模型的所有层都将正常运行,但不会进行反向传播(backpropagation)和参数更新。此外,某些层的行为也会发生改变,如Dropout层将停止dropout,BatchNorm层将使用训练时得到的全局统计数据而不是评估数据集中的批统计数据。torch.no_grad()是PyTorch的一个上下文管理器,用于在不需要计算梯度的场景下禁用梯度计算。在使用torch.no_grad()上下文管理器的情况下,所有涉及张量操作的函数都将不会计算梯度,从而节省内存和计算资源。
2024-08-22 20:03:27
215
原创 model只load一部分参数
当权重中的key和网络中匹配就加载,不匹配就跳过,如果strict是True,那必须完全匹配,不然就报错,默认是True。只加载部分参数权重,可以将state中不需要的参数删除,然后加载其他项。
2024-08-22 20:01:53
121
原创 模型参数获取
一个dict,name + parameters(grad=true),这些参数都是可学习的参数。一个list,只有parameters。所有的参数,不管grad是否为true。所有模块的迭代器,模型结构。
2024-05-31 18:03:59
144
原创 Laplace分布
相比高斯分布,高斯分布是L2分布,可以用来表示多维的相关性分布。在做NLL的时候,laplace收敛的更加匀速。laplace分布是一个L1的分布,只能用来描述一维的分布,不能用来表示多维的相关性分布。参考链接:https://zhuanlan.zhihu.com/p/156234503。
2024-04-19 11:14:36
106
原创 DP、DDP、FSDP
FSDP使属于DDP的一种,主要是在于要把DDP中的all-reduce操作拆解为reduce-scatter和all-gather 操作(在参数处理的时候)参考链接:https://blog.csdn.net/qinduohao333/article/details/131650137。参考链接:https://www.cnblogs.com/qizhou/p/16770143.html。直接用sys.exit()就行。如何退出DDP多卡?
2024-04-19 11:07:09
202
原创 PCA 主成分分析
PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。PCA的工作就是从原始的空间中顺序地找一组相互正交的坐标轴,新的坐标轴的选择与数据本身是密切相关的。其中,第一个新坐标轴选择是原始数据中方差最大的方向,第二个新坐标轴选取是与第一个坐标轴正交的平面中使得方差最大的,第三个轴是与第1,2个轴正交的平面中方差最大的。通过这种方式获得的新的坐标轴,我们发现,大部分方差都包含在前面k个坐标轴中,后面的坐标轴所含的方差几乎为0。
2024-04-11 20:31:09
256
原创 C++线程管理
std::unique_lock:支持std::lock_guard的功能,但是区别在于它提供更多的成员函数,比如:lock(),unlock()使用更加灵活,并且可以和condiction_variable一起使用控制线程同步。主要作用是防止wait线程空执行,只有等notify_one这个线程更新了之后,wait才会动,才会去尝试解锁;std::lock_guard: 构造函数执行了mutex::lock(),在作用域结束时,自动调用析构函数,执行mutex::unlock()
2024-03-12 17:38:01
374
原创 PointMixer论文阅读笔记
但是MLP-mixer在点云识别方面表现欠佳,PointMixer就是在保留了MLP-mixer优点的同时,还可以很好的处理点云问题。MLP-Mixer将CNN的两个任务切割开来,不同位置的mix叫token-mixing,同一位置不同channel的mix叫做channel-mixing。token-mix MLP具有转置同变性的缺点,而且token-mix只能使用固定数量的输入,但是对于点云来说,neighbor不是固定的,要用聚类算法。这里的乘法的element-wise。
2024-02-15 15:21:25
1163
原创 误差椭圆和协方差矩阵的关系
特征向量 = [[sin(), cos()], [cos(), -sin()]]协方差矩阵的特征值为误差椭圆的a和b, 特征向量为误差椭圆的方向。
2024-02-06 18:14:11
450
原创 派生类和基类的构造函数的关系
我们通常说的派生类和基类,我们调用派生类的自定义的构造函数的时候,派生类会自动调用基类中的default construct函数,而不能调用基类中的其他构造函数(除非在派生类的构造函数序列初始化的时候指明基类的构造函数,否则将会自动调用基类默认构造函数)
2024-01-21 12:16:16
418
原创 Focal loss
α / (1 - α) = 负样本数 / 正样本数, 平衡样本不均匀。平衡分类难易,如果P越大说明分类容易,乘以(1-p)变小。分类问题经典loss。
2023-12-28 15:12:38
336
原创 emplace_back() push_back()
假设 vector 中元素类型是类类型,那么 emplace_back() 待添加的元素的类型是类中有参构造的参数类型时,emplace_back() 比 push_back() 少一次移动或拷贝构造函数。而如果添加的元素是类类型的对象时,则和 push_back() 一样都只会调用一次移动构造函数或一次拷贝构造函数。原文链接:https://blog.csdn.net/unonoi/article/details/114680819。如果在类里面没有构造传类的构造函数,那么是浅拷贝,反之为深拷贝。
2023-11-01 17:40:55
47
原创 MARC: Multipolicy and Risk-aware Contingency Planning for Autonomous Driving论文阅读笔记
为了降低计算量,可以使用规则剪枝,但是剪枝的缺点是,很难设计出完美的规则去适应所有的场景。先用规则建立起sceanario,然后使用剪枝方法删除不必要的障碍物,然后使用闭环前仿(forward-simulation)建立轨迹。具体的,先衍生出各个场景,各个场景之间不同的地方(分叉的地方)使用分叉点,减少相同部分的计算量。最后使用cost计算,来选择最合适的场景和轨迹。这里的做法是planning的时候依旧保有了多模态,在planning阶段依旧考虑多模态,让planning的结果是对所有场景的最优结果。
2023-10-04 16:40:28
671
2
原创 M2I论文解读
整体来讲M2I是一种模型架构,主要提出了交互预测的概念。先是去区分influence和reactor(通过谁先通过碰撞点来计算,先到达碰撞点的是influencer,后到达碰撞点的是reactor),然后会influencer和reactor进行正常的单轨迹预测,然后用交互预测使用预测好的影响者的轨迹去预测响应者的轨迹。这个论文的缺陷是只提出了两个障碍物之间的交互,难以将这种交互扩展到多个障碍物。
2023-10-04 11:13:38
69
原创 MoE(Mixture-of-Experts)
具体做法是把一个预训练好的模型(比如BERT)的FFN层分解成多个experts,这样在计算的时候速度可以大幅提高(相当于只激活原始FFN网络的一部分)。token-level:前面那个文章,是 sample-level 的,即不同的样本,使用不同的experts,但是这篇则是 token-level 的,一个句子中不同的token使用不同的experts。MoE主要的作用是作为一个相对好的模型,去增加另一个模型的训练参数量,来提升另一个模型的能力。在模型的某个部分增加MoE,增大模型的参数量。
2023-08-06 18:28:49
162
原创 常见的曲线拟合
Idlt().solve()的理解,可以参考博客https://www.zhihu.com/column/c_1584844668977840128?所有的控制点一起控制整条曲线,动一个点,整条曲线都会变动,算力比较大。分段控制曲线,但是曲线不会经过控制点,可能会有小S弯。分段控制曲线,曲线经过控制点,可能会有小S弯。
2023-07-12 16:59:30
198
原创 CoreDump
gdb 运行的bin文件 xxx/corefile。mkdir xxxx // 创建一个文件夹。使用core_pattern工具。
2023-06-25 15:17:22
53
原创 git常用命令
git push -f origin xxx //打了patch之后,继续推送原来的commit。git pull = git pull origin xxx //获取最新版本并merge。git pull --rebase //不会自动merge, 会显示冲突选择忽略或修复。git reset --hard origin/xxx // 取消当前的commit。git fetch origin //远程获取最新版本到本地,不会自动merge。git push origin xxx //推送到一个分支。
2023-05-23 16:09:07
44
原创 DenseTNT论文笔记
同时会对F进行loss计算,这里会有goal的真值。为了解决预测没有多个真值的问题,会使用offline的优化算法来优化,具体的,前边获得heatmap的方法和online是一样的,将goal set prediction这一块换成optimization algorithm。由于预测的目标只有一个,去做多目标真值有一定的困难,这篇文章还提出了一种离线的优化算法,能够得到一些pseudo-label。这个地方置信度的真值标签v也很有意思,是在训练的时候现标注的,真值是预测出的轨迹里真值最近的那个head。
2023-05-21 20:43:13
747
原创 Virtual
虚基类https://blog.csdn.net/xbb123456rt/article/details/81986691?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167629987316800215069826%2522%252C%2522scm%2522%253A%252220140713.130102334…C++中基类的析构函数为什么要用virtual虚析构函数。
2023-05-14 10:15:42
36
原创 初识友元函数
友元关系在类之间不能传递,即类 A 是类 B 的友元,类 B 是类 C 的友元,并不能导出类 A 是类 C 的友元。“咱俩是朋友,所以你的朋友就是我的朋友”这句话在 C++ 的友元关系上 不成立。友元的特点是,在A中申明了B是A的友元,那么就说明A把B当做朋友,B能够访问A中的所有东西,但是A不一定是B的朋友,A不能访问B的东西。
2023-05-14 10:15:29
39
原创 二叉树初步整理
C++中map、set、multimap,multiset的底层实现都是平衡二叉搜索树,所以map、set的增删操作时间时间复杂度是logn,注意我这里没有说unordered_map、unordered_set,unordered_map、unordered_map底层实现是哈希表。又被称为AVL(Adelson-Velsky and Landis)树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
2023-05-12 11:26:00
35
原创 栈、队列、堆
所以大家经常说的大顶堆(堆头是最大元素),小顶堆(堆头是最小元素),如果懒得自己实现的话,就直接用priority_queue(优先级队列)就可以了,底层实现都是一样的,从小到大排就是小顶堆,从大到小排就是大顶堆。是一个披着队列外衣的堆,因为优先级队列对外接口只是从队头取元素,从队尾添加元素,再无其他取元素的方式,看起来就是一个队列。堆是一棵完全二叉树,树中每个结点的值都不小于(或不大于)其左右孩子的值。如果父亲结点是大于等于左右孩子就是大顶堆,小于等于左右孩子就是小顶堆。方法一:设置友元函数。
2023-05-12 11:25:42
28
原创 GRPC初试
offline-map-server这个代码库主要是将hdmap的接口写到grpc中 然后进行编译得到需要的python文件 然后在python脚本中可以通过这些python文件去访问hdmap。172.26.24.172:9091这台机器是潘安的机器 需要在那台机器上先运行C++的代码 然后再运行python代码。hdmap_grpc_api_pb2_grpc 是通过build.python_grpc.sh得到的。再 source gen_proto_inst.sh 生成proto_inst.h。
2023-05-12 11:25:10
41
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人