pytorch
Tchunren
本人喜欢运动,热爱生活
展开
-
pytorch使用动量更新方式对模型进行更新
在训练模型的过程中,有时候我们需要设置两个模型,一个是随着训练数据的加入进行参数更新的model,另一个模型是作为model的平均模型model_ema,对model_ema进行更新的时候,采用的方式为:θtmodel_ema=βθt−1model_ema+(1−β)θtmodel\theta_t^{model\_ema} =\beta\theta_{t-1}^{model\_ema}+(1-\beta)\theta_t^{model}θtmodel_ema=βθt−1model_ema+(1−β)θ原创 2021-08-31 21:35:02 · 1639 阅读 · 0 评论 -
pytorch 交叉熵不收敛
这两天利用pytorch搭建模型,训练分类网络,模型没问题,代码没问题,但是损失就是死活不收敛。看一下代码吧:src_prec, _ , src_feat = self.model(src_imgs)loss_src_ce = self.criterion_ce(src_prec[:, :self.src_classes], src_labels, weight_src)死活不好使,搞不清楚,可是我后来稍微一改,改成下面的:src_prec, _ , src_feat = self.model(s原创 2021-07-02 09:05:16 · 1629 阅读 · 0 评论 -
pytorch 实现施密特正交化
对于一个给定的pytorch张量,如果想要对这里面的每一个行向量进行施密特正交化,可以使用下面的代码:import numpy as npfrom sympy.matrices import Matrix, GramSchmidtimport torchimport torch.nn.functional as Fdef orthogo_tensor(x): m, n = x.size() x_np = x.t().numpy() matrix = [Matrix(col原创 2021-05-20 21:39:05 · 2633 阅读 · 5 评论 -
pytorch查找矩阵中最大元素的值和索引
对于一个矩阵,如果想要找到这个矩阵中最大元素的值和这个元素在原矩阵中的索引,可以用下面的代码: x = torch.randn(4,3) print(x) column = 3 index = torch.argmax(x) x_view = x.view(-1) print(x_view) print(index) if (index+1)% column == 0: i = (index+1)//column - 1原创 2021-05-09 12:53:20 · 7696 阅读 · 0 评论 -
pytorch 使用 type_as 进行数据类型转换
tensor1=torch.FloatTensor(4)tensor2=torch.IntTensor(3)tensor1=tensor1.type_as(tensor2)原创 2021-01-28 17:32:24 · 874 阅读 · 0 评论 -
python argparse中使用列表作为默认项
import argparseparser = argparse.ArgumentParser(description="test try")parser.add_argument('--data', nargs='+', type=int,default=[10,35,20,35])args = parser.parse_args()print(args.data)print(type(args.data))上面的程序直接点击run, 运行后的输出为:[10, 35, 20, 35.原创 2021-01-14 10:04:11 · 1251 阅读 · 0 评论 -
学习率调整策略
https://zhuanlan.zhihu.com/p/93624972原创 2021-01-14 09:21:36 · 224 阅读 · 0 评论 -
pytorch 线性代数 特征值、特征向量的求解
https://www.jianshu.com/p/234bc2a533c7原创 2021-01-11 11:08:24 · 5122 阅读 · 0 评论 -
torch 保证数据不为零
在pytorch进行一些计算的时候,当某个数据需要出现在分母或者对数函数中的时候,我们需要保证其不是零,从而保证运算的稳定性,可以使用下面的代码来实现:x = torch.tensor([0.2,0.1,0,0.4])print(x)x.clamp_(1e-6)print(x)上述程序的运行结果为:tensor([0.2000, 0.1000, 0.0000, 0.4000])tensor([2.0000e-01, 1.0000e-01, 1.0000e-06, 4.0000e-01]原创 2021-01-10 11:05:13 · 2117 阅读 · 0 评论 -
model.load_state_dict(state_dict, strict=False)
我们在构造好了一个模型后,可能要加载一些训练好的模型参数。举例子如下:假设 trained.pth 是一个训练好的网络的模型参数存储model = Net()是我们刚刚生成的一个新模型,我们希望model将trained.pth中的参数加载加载进来,但是model中多了一些trained.pth中不存在的参数,如果使用下面的命令:model.load_state_dict(state_dict)会报错,说key对应不上,因为model你强人所难,我堂堂trained.pth没有你的那些个.原创 2020-12-03 15:22:39 · 48225 阅读 · 34 评论 -
pytorch中的手动设置图片标签的方式
如果想自己手动设置一些标签,可以使用下面的方式:import torchlabel = torch.tensor([2,0,4,1,2]).long()注意,一定要在后面加上.long()才行,因为标签是这个long型的数据原创 2020-11-27 16:04:01 · 1653 阅读 · 0 评论 -
pytorch 如何在训练过程保证分类层的分类中心保持为单位化的中心
在分类问题中,最后的一层线性分类层,里面的每个向量相当于是各个类的中心,为了让不同类之间的类中心保持一致的范数,也就是都保证其为单位向量,我们可以在每次进行forward()之前进行一个分类层的参数标准化操作,这个操作不需要在优化器内进行,可以在forward()函数中进行,例子如下:self.classifier.weight.data.copy_(F.normalize( self.classifier.weight.data ,dim=1))这样就能保持每次进行分类计算的时候,分类中心都是标原创 2020-11-17 10:41:43 · 313 阅读 · 0 评论 -
pytorch 优化器优化模型参数的数据分析
一直有一个疑问,我们生成一个模型,这个模型的参数传递给了优化器,优化器在优化的时候,模型的参数会有变化,这之间的关联到底是怎样的呢?如果想改变模型的参数,只能通过优化器更新吗?如果在优化器外面更新了,这个时候的参数会在模型中、优化器中同时起作用吗?答案是会的,因为我们传递给优化器的模型参数包括了模型参数的地址,我们在这个地址上进行更改,则全局都会同步产生变化。其实我要解决的一个问题就是,我想在优化器对模型进行更新的情况下,我自己也对模型增加一个更新。下面是我的代码: class Net(nn原创 2020-11-17 10:24:37 · 1397 阅读 · 1 评论 -
pytorch 张量tensor 转为 jpg 图片
在用pytorch训练网络的时候,每一张图片都被转为了张量形式的数据,有时候我们需要将这些张量转为jpg格式的图片,应该如何转变呢?我们只要将张量tensor转为PIL格式的数据,然后再将数据保存起来就可以了,下面以一个简单的例子进行说明,这个例子中的图片是一个随机生成的图片。import torchfrom torchvision import transformstoPIL = transforms.ToPILImage() #这个函数可以将张量转为PIL图片,由小数转为0-255之间的像素原创 2020-11-13 09:54:41 · 26067 阅读 · 5 评论 -
Torch Numpy Variable PILimage 之间转换
https://blog.csdn.net/jee_king/article/details/87368329原创 2020-11-11 20:10:46 · 126 阅读 · 0 评论 -
解决输出为nan的问题
在训练网络的时候,发现输出全都是nan,这个时候很大可能是数值不稳定,比如除数太小,不稳定,或者是log里面的参数太小,不稳定,这个时候在可能出现运算不稳定的地方增加一些稳定系数就好了,比如:1.在分母的位置增加一个稳定数exp_st_sum = exp_st_with_target.sum(dim=1, keepdim=True) + 1e-6exp_st_rate = exp_st_with_target / exp_st_sum 2.在log里增加稳定系数loss_gt原创 2020-11-07 10:16:00 · 10062 阅读 · 0 评论 -
解决交叉熵损失不收敛的问题
最近在训练一个分类类网络的时候,发现损失不收敛,网络的各个部分没有问题,输入输出都是正常的情况,但就是网络的损失不收敛,最开始的交叉熵损失在6左右,一直到50个epoch以后,损失依然是5左右,map 和rank1都很扎心。后来分析后发现,最后的分类网络送出来的各个值都太小了,使得经过softmax后的各个类别的概率差异不大,为了解决这个问题,在将分类网络送出的结果,在送入交叉熵损失函数之前,加一个temperature就可以了。1.下面的代码是不收敛的一个伪代码,分类网络送出来以后,直接送入了交叉原创 2020-11-07 10:07:16 · 5318 阅读 · 4 评论 -
torch.save() torch.load()
在使用pytorch进行深度学习训练的时候,经常会有些内容需要保存下来,保存到硬盘张,不管什么时候我们都可以读取到,那么这个时候,使用torch.save()就可以将内容存储器来,使用torch.load()就可以将存取的内容读取出来。1.torch.save()使用方法torch.save()使用的时候需要往里面放进去两个参数,分别是要存储的内容和存储的地址。下面是个例子:import torchstatemement = {'name':'dalishi','age':19}torc原创 2020-11-06 09:57:17 · 2383 阅读 · 0 评论 -
pytorch 查找指定元素的索引
在pytorch中,我们经常需要查找tensor中某一个元素的索引,可能是在向量中查找索引,也可能是在矩阵中查找索引,下面分贝举例子:1.在矩阵中查找某个指定元素的索引:import torchimport numpy as npa = torch.tensor( [[1,2,3],[4,5,6],[5,6,7],[6,7,8]] )a_t2n = a.numpy()index = np.argwhere( a_t2n>4 )print(index)运行结果如下:[原创 2020-11-04 11:02:35 · 25930 阅读 · 4 评论 -
访问远程Visdom
1. 连接ssh时,将服务器的8097端口重定向到自己机器上来:ssh -L 18097:127.0.0.1:8097 username@remote_server_ip其中:18097:127.0.0.1代表自己机器上的18097号端口,8097是服务器上visdom使用的端口2. 在服务器上使用8097端口正常启动tensorboard:python -m visdom.server3在本地浏览器中输入地址:http://127.0.0.1:18097/一...原创 2020-10-28 11:42:09 · 931 阅读 · 0 评论 -
解决visdom的启动问题 visdom [Errno 110] Connection timed out while downloading https://cdn.plot.ly/plotly-l
https://blog.csdn.net/weixin_44058333/article/details/102963948原创 2020-10-28 11:33:48 · 499 阅读 · 0 评论 -
pip安装 gpu 版本 faiss
pip --default-time=1000 install -i https://pypi.tuna.tsinghua.edu.cn/simple faiss-gpu原创 2020-10-28 10:32:58 · 2082 阅读 · 0 评论 -
pytorch可视化工具
visdomTensorboardX原创 2020-10-26 21:36:16 · 150 阅读 · 0 评论 -
ValueError: can‘t optimize a non-leaf Tensor 数据在cpu 和gpu之间转换的时候涉及到requires_grad和is_leaf的趣事
当我生成一个可导类型的cpu张量的时候,判断其是否为叶子节点,显示为True ,如下面的代码所示:x = torch.randn(750,2048,requires_grad=True)print(x.is_leaf)#输出为:True但是当我直接把这个生成的cpu类型迁移到gpu上时,有意思的事情发生了:x = torch.randn(750,2048,requires_grad=True).cuda()print(x.is_leaf)#输出为 False很蒙蔽吧,那么如何原创 2020-10-25 11:25:38 · 5445 阅读 · 0 评论 -
pytorch 张量 叶子节点说明
pytorch中,叶子节点是用来进行优化的变量,所以只有在requires_grad=True的时候才有讨论的意义。只有生成的张量才能是叶子节点,只要经过了运算,就不是叶子节点了。包括normalize, 改变某个位置的数值等等...原创 2020-10-25 10:47:49 · 1674 阅读 · 0 评论 -
pytorch 叶子节点讲解
https://blog.csdn.net/wangweiwells/article/details/101223420原创 2020-10-25 09:06:52 · 2085 阅读 · 0 评论 -
pytorch optim 优化器内核分析
https://www.cnblogs.com/peachtea/p/13532190.html原创 2020-10-24 21:59:47 · 796 阅读 · 0 评论 -
行人重识别 reid msmt17 性能指标排行
https://paperswithcode.com/sota/person-re-identification-on-msmt17原创 2020-10-19 14:36:47 · 859 阅读 · 0 评论 -
torch norm() Formalize()
torch中的normalize的功能是将一个向量单位化,比如一个向量为:x = [1,2,3,4]则标准化过程为先求出这个向量的二范数,然后将每一个维度上面的值都除以这个二范数。import torch.nn.functional as Fimport torchx = torch.randn(1,3)print(x)z = F.normalize(x)print(z)运行结果为:tensor([[-1.0407, -1.1139, -0.9541]])设一个向量原创 2020-10-18 20:57:32 · 2295 阅读 · 2 评论 -
镜像说明
v4.0 可以正常运行 SPCLv5.0可以使用reranking原创 2020-10-12 16:51:17 · 125 阅读 · 0 评论 -
ubuntu 安装ignite pytorch 深度学习使用
经常在代码中看到下面的代码,这个库怎么安装呢?from ignite.engine import EngineFrompip:pip install pytorch-igniteFromconda:conda install ignite -c pytorch官网为:https://pytorch.org/ignite/原创 2020-10-12 14:02:33 · 2024 阅读 · 0 评论 -
REID 行人重识别 训练过程中的trick
1 warm up: 前十个epoch学习率先线性增长,然后保持,20和40个epoch的时候,学习率衰减为0.12 数据的随机擦除3 label smooth,对交叉熵进行一个改变4 将resnet50的最后下采样和卷积步长设置为15 在使用triplet和ID loss的时候,将送给triplet Loss 的特征经过一个BN层,然后送给ID Loss,这个BN层中,bias归零,不使用6 加center loss...原创 2020-10-11 19:00:47 · 450 阅读 · 0 评论 -
介绍reid各种tricks的论文
https://openaccess.thecvf.com/content_CVPRW_2019/papers/TRMTMCT/Luo_Bag_of_Tricks_and_a_Strong_Baseline_for_Deep_Person_CVPRW_2019_paper.pdf原创 2020-10-09 20:57:43 · 228 阅读 · 0 评论 -
ptorch F.softmax() 梯度信息为None
我在进行一个测试梯度实验的时候,发现,当原始变量流经F.softmax以后,原始变量的梯度就无法获得了,例子如下:import torch.nn.functional as Fimport torchx = torch.randn(1,5,requires_grad=True)print(x)# x = F.softmax(x,dim=1)# print(x)l = 0for i in range(5): l = l + x[0][i]print(l)l.backwar原创 2020-10-09 17:21:40 · 1182 阅读 · 1 评论 -
pytorch:对比clone、detach以及copy_等张量复制操作
https://www.cnblogs.com/wwzone/articles/12917333.html原创 2020-10-06 17:50:05 · 279 阅读 · 0 评论 -
从内存角度看pytorch中张量的一些好的博客内容如
『PyTorch』第五弹_深入理解Tensor对象_下:从内存看Tensorhttps://www.cnblogs.com/hellcat/p/8445372.html原创 2020-10-06 17:44:53 · 192 阅读 · 0 评论 -
训练过程source和target采用不同的BN参数,在测试阶段就不用指定是使用哪个域的BN参数了
行人重试别的无监督训练过程,在backbone中为了使源域和目标域的BN训练参数区分开,不相互影响,使用了下面的代码:import torchimport torch.nn as nn# Domain-specific BatchNormclass DSBN2d(nn.Module): def __init__(self, planes): super(DSBN2d, self).__init__() self.num_features = plane原创 2020-10-05 14:42:15 · 444 阅读 · 3 评论 -
torch.Tensor常用函数
https://www.jianshu.com/p/45a8579628c4原创 2020-09-26 17:47:08 · 465 阅读 · 0 评论 -
ECCV2020 reid行人重识别论文指标比对说明
1Joint Disentangling and Adaptation for Cross-Domain Person Re-Identification https://arxiv.org/pdf/2007.10315.pdf 源码:https://github.com/NVlabs/DG-Net-PP2.Multiple Expert Brainstorming for Domain Adaptive Person Re-identificationhttps://arxiv.org...原创 2020-09-15 16:04:48 · 839 阅读 · 0 评论 -
torch.nonzero()
pytorch中的torch.nonzero(),就是返回张量中元素不为0的元素的索引。举例子如下:import torchx = torch.tensor([4,0,1,2,1,2,3])result = 1==x print(result)print(result.nonzero()) #输出了不为0值的索引print(result.nonzero().view(-1))#将结果转为一维的张量...原创 2020-08-26 11:26:36 · 902 阅读 · 0 评论