自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(356)
  • 资源 (1)
  • 收藏
  • 关注

原创 Torch截断一部分后是否能梯度回传

【代码】Torch截断一部分后是否能梯度回传。

2023-10-06 13:08:45 659 1

原创 将nn.Module作为参数传入另一个Module中,是否能优化?

将nn.Module作为参数传入另一个Module中,是否能优化?

2023-01-18 23:42:03 1266 1

原创 nn.Module是否要通过forward才能进行反向传播?

nn.Module是否要通过forward才能进行反向传播?

2023-01-05 17:47:54 325

原创 F.interpolate插值大小设定

1

2022-07-12 13:19:42 1481

转载 C++:vector<int>

一维vector创建一维vector:vector<int> nums;//不指定长度vector<int> nums(n); // 指定长度为n 添加元素nums.push_back(1);//直接从数组末端添加nums[i] = 1;//直接赋值给第i个位置删除元素nums.resize(nums.size-i); //直接将数组长度减小,某种方式上删掉了后面i个nums.pop_back();//删掉最后一个元素数组遍历for

2022-04-25 23:06:07 1863

转载 C++ 不同容器的复杂度

map, set, multimap, and multiset上述四种容器采用红黑树实现,红黑树是平衡二叉树的一种。不同操作的时间复杂度近似为:插入: O(logN)查看:O(logN)删除:O(logN)hash_map, hash_set, hash_multimap, and hash_multiset上述四种容器采用哈希表实现,不同操作的时间复杂度为:插入:O(1),最坏情况O(N)。查看:O(1),最坏情况O(N)。删除:O(1),最坏情况

2022-04-25 20:54:46 236

原创 nn.Pixelshuffle的转化规则

简单来说,例如nn.Pixelshuffle(2),他会将前4个通道,拼在第一个通道的空间中,然后将接下来4个通道拼在输出的第二个通道的空间中,依次类推,见下面的实验就懂了实验代码import torchimport torch.nn as nnps = nn.PixelShuffle(2)c=8h=4w=4input = torch.range(1,c*h*w).view(1,c,h,w)print(input.shape)output = ps(input)print("ou

2022-04-03 18:41:33 3169

原创 pytorch的model.named_modules()解析

import torchimport torch.nn as nnclass Net(nn.Module): def __init__(self, num_class=10): super().__init__() self.features = nn.Sequential( nn.Conv2d(in_channels=3, out_channels=6, kernel_size=3), nn.Batch...

2022-03-29 23:35:05 2177

原创 python plt横纵坐标科学计数法

Python绘图,如何取消纵坐标的科学计数法Python绘图,如何取消纵坐标的科学计数法通过style的关键字来判断plain代表关闭科学计数法sci代表开启科学计数法具体使用  关闭科学计数法plt.ticklabel_format(style='plain') 开启科学计数法plt.ticklabel_format(style='sci', scilimits=(0,0))...

2022-03-14 14:04:07 7003

原创 torch.masked_select和torch.masked_scatter

torch.masked_selectimport torchx = torch.randn(3,4)print(x)mask = torch.randn(3,1) >0print(mask)s=torch.masked_select(x,mask)print(s)输出tensor([[-2.7601, -0.9957, -0.2239, -1.2674], [ 1.2190, 1.6782, -0.3635, 0.6803], [-1....

2022-01-26 02:09:06 3255 1

原创 服务器间传输文件的指令

之前都是把数据集下载下来,然后再上传到另外一台服务器上,这样效率就很低可以直接使用以下指令进行传输:scp -r xxxx(填写这个文件夹的路径) xxxx(另一台服务器上的用户名)@xxxxxxx(另一台服务器的IP地址)...

2021-12-21 20:05:01 1743

原创 torch eval梯度回传问题

直接上结论,即使model.eval()了,梯度传还是有效的。也就是说eval也就固定batchnorm的参数用的。from torch.autograd import Variableimport torchimport torch.nn as nnimport torch.nn.functional as Ffrom torch import optimfrom collections import OrderedDictclass g(nn.Module): def _..

2021-12-21 20:00:45 1224

原创 pytorch中parameter的默认命名规则

一般都是self.xxx作为命名,如果是conv2d,linear这些基本运算单元,那一半会有参数weight和bias.如果是nn.Squential,则是xxx.1.weight,xxx2.weight这样命名。如果是直接调用另外一个模块,那么就是xxx.xxx2......from torch.autograd import Variableimport torchimport torch.nn as nnimport torch.nn.functional as Ffrom torch

2021-10-16 19:41:58 760

原创 pytorch模拟tensorflow的weights输入(适用元学习)

元学习中由于需要二次求导,因此使用tensorflow的形式实现是最方便的from torch.autograd import Variableimport torchimport torch.nn as nnimport torch.nn.functional as Ffrom torch import optimfrom collections import OrderedDictfrom model_meta import commonclass g(nn.Module):

2021-10-16 19:26:50 363

原创 torch.autograd.grad与backward

1. 进行一次torch.autograd.grad或者loss.backward()后前向传播都会清空,因此想反复传播必须要加上retain_graph=True。2.torch.autograd.grad是返回一个列表,对应你所列参数的梯度。而backward()则是对parameter中的grad项进行赋值。from torch.autograd import Variableimport torchimport torch.nn as nnclass g(nn.Module):

2021-10-15 18:32:13 1289 1

原创 torch中Variable的作用

Variable可以把输出的Tensor变成一个输入变量,这样梯度就不会回传了import torchfrom option import argsimport utilityimport torch.nn as nnimport model_stage2 as model# checkpoint = utility.checkpoint(args)# model = model.Model(args, checkpoint)# print(model.parameters())# f

2021-10-06 22:31:45 2787 2

原创 F.conv2d的参数groups的作用

import torch.nn.functional as Fimport torchinputs = torch.arange(1, 21).reshape(1, 2, 2, 5)filters = torch.arange(1, 7).reshape(2, 1, 1, 3)print(inputs)print(filters)res = F.conv2d(input=inputs, weight=filters, stride=(1, 1), groups=2)print(res)...

2021-09-14 14:02:40 3028

原创 卷积的原理

简单来说就是从可以左右可覆盖到一个kernel的点开始卷积import numpy as npimport torchimport torch.nn.functional as F"""手动定义卷积核(weight)和偏置"""w = torch.ones(1, 1, 3, 3) # 16种3通道的5乘5卷积核"""定义输入样本"""x=torch.arange(25).view(1,1,5,5).float()print(x)print(w)"""2D卷积得到输出"""out

2021-08-11 10:57:43 146

原创 关于torch.round可导性问题

先上结论:不可导import torchimport torchimport torch.nn as nnclass g(nn.Module): def __init__(self): super(g, self).__init__() # self.k = nn.Conv2d(in_channels=2, out_channels=1, kernel_size=1, padding=0, bias=False) def forward(s

2021-08-05 21:31:32 1266

原创 torch.scatter——一个可以与torch.topk连用的赋值函数

import torchl = torch.rand((1,3,5,5))*5a, idx1 = torch.sort(l,-1)b, idx2 = torch.sort(idx1,-1)print(l)print(a,idx1)print(b,idx2)print(l.scatter(-1,idx1,a))

2021-07-26 15:35:09 230

原创 关于torch.sort排序后的结果可导性问题

先上结论,可导的,会将梯度回传到排序前的import torchimport torchimport torch.nn as nnclass g(nn.Module): def __init__(self): super(g, self).__init__() #self.k = nn.Conv2d(in_channels=2, out_channels=1, kernel_size=1, padding=0, bias=False) de

2021-07-26 15:03:32 1120 3

原创 关于torch.topK取得的元素可导性问题

先上结论是可导的,但是可导的也只有被筛选出来 那一部分import torchimport torchimport torch.nn as nnclass g(nn.Module): def __init__(self): super(g, self).__init__() #self.k = nn.Conv2d(in_channels=2, out_channels=1, kernel_size=1, padding=0, bias=False)

2021-07-26 15:00:04 1660

原创 F.unfold运行解析

先上结论,unfold是先对第一通道展平,再对第二通道展平,依次叠加import cv2import numpy as npimport torchimport torch.nn.functional as Fb=1c=2h=12w=12s=torch.arange(1,b*c*h*w+1).float()s=s.view(b,c,h,w)up_factor=2kernel=3*up_factort = F.unfold(s, kernel_size=(kernel, kern

2021-07-06 10:21:15 2435

原创 torch反卷积转核180

好奇怪啊.torch中conv2d没有将核旋转180的习惯,但反卷积却有import torchimport torch.nn.functional as Fmodel = torch.nn.ConvTranspose2d(in_channels=1, out_channels=1, kernel_size=3,stride=1,padding=0)x = torch.tensor([[[1,2],[3,4]]], dtype=torch.float32).unsqueeze(0)model.

2021-06-24 22:24:06 225

原创 Python中父类调用子类覆盖的函数时的选择

class FatherA: def __init__(self): print('init action in father class A') self.print_x() print("*******************") def print_x(self): print("testV2")class SubClassB(FatherA): def __init__(self): ...

2021-06-19 21:38:48 341

原创 permession denied

当运行mm时permession denied可以运行chmod777dist_train.sh进行授权

2021-05-24 17:34:47 301

原创 可形变卷积的CUDA实现及编译

代码详见我上传的资料。经过我的测试cuda10.2下torch1.7和torch1.5都编译失败了只有torch1.4 cuda10版本编译通过。编译时记得把build文件删除,不然会影响本地环境的编译。编译就运行 python setup.py develop即可。...

2021-03-31 16:47:06 419

原创 Focal length in pixels的计算方法

一般来说,我们采用针孔相机模型,也就是认为它用到的是小孔成像原理。在相机坐标系下,一般来说,我们用到的单位长度,不是“米”这样的国际单位,而是相邻像素的长度。而焦距在相机坐标系中的大小,是在图像处理领域的一个非常重要的物理量。假设我们已经根据相机参数,得到镜头的物理焦距大小(focal length),和相机胶片的宽度(CCD width),以及照片的横向分辨率(image width),则具体计算公式为:Focal length in pixels = (image width in p...

2021-03-18 15:19:49 2144

原创 神经网络不同Norm之间的差别

神经网络不同Norm之间的差别

2021-01-26 19:36:56 594

原创 torch 赋值运行效率

尽量少进行赋值,一模一样的操作,赋值竟然慢了一倍import torchimport timex=torch.rand(9,256,40,40)t=100st=time.time()for i in range(t): z=torch.clamp(x+3,0,1)ed=time.time()print(ed-st)st=time.time()for i in range(t): z=x+3 z=torch.clamp(z,0,1)ed=time.time()

2020-10-07 12:43:25 358

原创 列表解析式和普通for循环运行效率对比

运行时间差不多,但是列表解析式的写法更加简洁。实验代码见下L = []d=[]n=10000import timest=time.time()for i in range(1,n): L.append(i**2)ed=time.time()print(ed-st)st=time.time()d = [ i**2 for i in range(1,n)]ed=time.time()print(ed-st)0.00299167633056640620.0029928

2020-09-27 15:38:00 374

原创 torch动态调整学习率的方法

发现可以通过optimzer.param_group来动态调整学习率,而且注意这里param_group出现的顺序就是param中定义的顺序。import torch.optim as optimlr1=0.1lr2=0.2params = [ {"params": filter(lambda p: p.requires_grad, self.model.a.parameters() if args.num_gpu == 1 else self.m

2020-09-27 14:39:58 724

转载 python中类变量和实例变量的区别

类变量只在类声明的时候初始化一遍,而实例变量在每次生成新对象时都要初始化一遍。更多细节详见:https://www.jianshu.com/p/3aca78a84defhttps://blog.csdn.net/feng98ren/article/details/80068036

2020-09-25 17:18:18 175

原创 forward中传出的不连续数组仍然不连续

在前向类中传出的不连续数组不会重新分配内存,所以还是不连续的import torchimport torch.nn as nnclass s(nn.Module): def __init__(self): super(s, self).__init__() def forward(self): x=torch.rand(1,5,6,7) g=x.permute(0,3,2,1) print(g.is_contigu

2020-09-15 21:31:57 103

原创 gather与grid_sample对比

由以下代码进行实验,发现:gather运行时间为:0.7160608768463135Sgrid_sample bilinear0.7564301490783691Sgrid_sample nearest0.5Simport torchimport timeimport torch.nn.functional as Fs=torch.rand(9,32,160,160)s=s.view(9,32,160*160)p=torch.rand(9,32,160,160)z=

2020-09-15 13:16:32 387

原创 转换数据类型时间损耗

将float型转换为long型估计会重新分配内存import torchimport times=torch.rand(9,32,160,160)b,c,h,w=s.size()st=time.time()for i in range(40): g=s.long()ed=time.time()print(ed-st)不换数据型1.33514404296875e-05S换数据型1.0417239665985107S耗时应该随数组增大而增大...

2020-09-14 22:49:45 505

原创 关于view运行速度探究

当只是生成view视图的时候,不用重新分配内存根本不耗费时间。仅仅使用permute的时间其实也就10-4量级,忽略不计。但是加上contiguous()重新分配内存后,耗时将会增加1000倍,估计还会随着数组的大小变化而变化import torchimport times=torch.rand(9,32,160,160)b,c,h,w=s.size()st=time.time()for i in range(40): g=s.view(b*c,h,w).permute(0,2,1)

2020-09-14 22:33:15 268

原创 使用grid_sample和fold提取块的操作

使用grid_sample和fold提取块的操作import torchimport numpy as npfrom imageio import imread, imsavefrom PIL import Imageimport torch.nn.functional as Ffrom Patch_model.DeformSearch import DeformSearchRef = imread("0.png")Ref = Ref.astype(np.float32)Ref = R

2020-09-14 20:18:14 355

原创 torch.argmax的一些补充

torch.argmax是不会向后传梯度,但是被选中的部分还是可以传梯度的import torchs=torch.rand(1,3,6,6,requires_grad=True)d=torch.rand(1,3,6,6,requires_grad=True)p=torch.argmax(s,dim=1).unsqueeze(1)q=torch.gather(d,dim=1,index=p)q=q.sum()loss=(q-1)*(q-1)loss.backward()print(s.

2020-09-14 11:12:11 1747 1

原创 F.interpolate可导性问题

可导import torchimport torch.nn as nnclass g(nn.Module): def __init__(self): super(g, self).__init__() self.k = nn.Conv2d(in_channels=2, out_channels=1, kernel_size=1, padding=0, bias=False) def forward(self,z): a=torch.n

2020-09-11 20:27:40 1991 1

可形变卷积的CUDA实现及编译

CUDA实现的可行变卷积

2021-03-31

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除