pytorch代码积累
judgechen1997
这个作者很懒,什么都没留下…
展开
-
关于模型分成多部分时的torch.optim优化设置
上次写代码时,backbone encoder是用了别人代码,另外又添加了多分支多layer作为task decoder。但是开始犯了个很致命的错误,在pytorch设置优化器时,仅使用了:optimizer = torch.optim.Adam(model.parameters(), lr=args.lr, weight_decay=args.weight_decay)这样实际上只优化了部分模型,应该这样设置:optimizer = torch.optim.Adam([{'params': mo原创 2020-09-14 17:18:46 · 845 阅读 · 0 评论 -
pytorch tensor int型除法
昨天晚上跑起来一个classification实验,今天发现训练loss在降,然而accuracy永远是0 。。。直觉告诉我evaluation有问题然后发现自己写了个很愚蠢的bugaccuracy对应的tensor出来是int型的,我用到了一个除法取平均。而pytorch里无论用 / or // 结果都是取整,,accuracy一直就没有。。所以转换成float就没问题了,,低级bug,下不为例...原创 2020-08-05 16:47:00 · 2047 阅读 · 0 评论 -
pytorch点乘&高维矩阵乘法
torch.mul和直接用运算符 * 都是点乘(可广播)torch.mm只能二维矩阵相乘,而torch.matmul可以广播到多维参见:https://blog.csdn.net/weixin_42105432/article/details/100691592原创 2020-06-11 23:12:29 · 5731 阅读 · 0 评论 -
pytorch求范数&归一化
除以L1 L2范数 max值 归一化a = torch.ones((2,3)) #建立tensora2 = torch.norm(a) #默认求2范数a1 = torch.norm(a,p=1) #指定求1范数instance normal大概是对每一个channel归一化到均值0,方差略大于1...原创 2019-10-17 11:02:04 · 6582 阅读 · 0 评论 -
Python val() 通过字符串对应至同名变量
eval()函数可以方便的在python中,通过字符串访问变量名。方便代码中提取特定的一系列变量名相近的变量。在写Pytorch的一套代码(GPS DlinkNet_fusion),想要提取ResNet中的layer1、layer2、layer3、layer4. 一句一句的写代码太多,又不太雅观。这时候可以用val() 通过字符串对应至同名变量。简单例子,提取resnet.layer1,resnet.layer2,…resnet = models.resnet34(pretrained=True)b原创 2020-05-21 18:16:44 · 4360 阅读 · 0 评论 -
with torch.no_grad(): 可显著减少显存占用
模型训练的时候,爆显存了,可以调整batch,对数据进行crop等等操作今天发现一个模型,每次测试的时候爆显存,开始以为原因是用了全图(1920x1080略大)进行inference。这是一方面,但后来发现忘了用with torch.no_grad():这导致模型运算的时候不能释放显存(记录了梯度信息),所以显存巨大。加了之后,不过3G显存就够了。。确实inference不需要那么多显存的,以后记着这种不正常现象如何处理。...原创 2020-05-21 00:49:02 · 5204 阅读 · 6 评论 -
Pytorch tensor特定条件判断索引
torch.where() 用于将两个broadcastable的tensor组合成新的tensor,类似于c++中的三元操作符“?:”区别于python numpy中的where()直接可以找到特定条件元素的index想要实现numpy中where()的功能,可以借助nonzero()对应numpy中的where()操作效果:...原创 2020-04-28 18:31:07 · 14842 阅读 · 0 评论 -
不改变model结构,利用hook仅拿出中间变量进行操作
当需要拿出model的一些中间输出并做bp等操作,可以利用hook机制对某个module调用register_forward_hook(get)时,会在forward时,自动调用定义的函数get(也可以是其他名字)但参数是model input output。使用input和model,在hook标注的这个module得到的结果会返回到output,然后可以对它进行一些操作我这里是把一些fea...原创 2019-10-09 22:30:43 · 338 阅读 · 0 评论