
PyTorch
文章平均质量分 66
慢慢更新。。
Hungryof
不回答任何问题!
展开
-
Pytorch学习(二十九) ------------torch.split与torch.roll结合进行的一种高端操作
How to reverse a multi-hot encoding ?multihot_batch = torch.tensor([[0,1,0,1], [0,0,0,1], [0,0,1,1]])(multihot_batch == torch.tensor(1)).nonzero()tensor([[0, 1], [0, 3], [1, 3], [2, 2], [2, 3]])希望得到[[1, 3],[3],[2, 3]原创 2021-02-18 17:40:23 · 1793 阅读 · 0 评论 -
Pytorch 学习 (二十八)----- 多GPU使用时的一个注意事项
总说有时候,我们构建一种中间特征的loss。需要拿到feature,然后这个 feature 和 target_feat 比较。不要直接在model的forward中求loss,否则只能在单GPU上跑。而是最终将feature和target_feat都返回,在train里面,此时这些返回的 feat会自动变成 主GPU上的tensor,从而不会有tensor不在同一个device的问题。...原创 2020-09-27 15:40:45 · 242 阅读 · 0 评论 -
Pytorch学习(二十七)-------- 针对不均衡数据集的重采样Resample
总说针对类别数目不均匀的数据,有些类图片多,有些少,如果直接训练,那么就会造成过拟合类别多的数据。最简单的方法就是重采样,直接根据每一类的数目,来重新分配权重。你想想,普通肯定是均匀概率采样的,自然数目多的图片,采样到的概率就大。神奇的 WeightedRandomSampler直接丢代码# 数据集中,每一类的数目。 class_sample_counts = [150, 200, 300] weights = 1./ torch.tensor(class_sample_counts, dtyp原创 2020-07-27 13:40:36 · 8188 阅读 · 11 评论 -
Pytorch学习 (二十六)---- torch.scatter的使用
总说一个非常有用的函数,主要是用于“group index”的操作。from torch_scatter import scatterimport torchsrc = (torch.rand(2, 6, 2)*4).int()index = torch.tensor([0, 1, 0, 1, 2, 1])# Broadcasting in the first and last dim.out = scatter(src, index, dim=1, reduce="sum")prin原创 2020-05-21 19:00:06 · 2146 阅读 · 0 评论 -
Pytorch 学习(二十五)---高级DataLoader技巧----每次返回的Tensor的size可以任意
总说大家都知道,默认的DataLoader每次返回的Tensor的尺寸都是固定的,因为batchsize>1时,默认需要stack一下,比如__getitem__()返回的图片return img,其中img是 CHW, 你在外面拿到就是 N*C*H*W了。因为,默认return torch.stack(batch, 0, out=out)了一下。如果每次img图片不一样,就会出错。有些...原创 2020-04-23 21:39:42 · 1903 阅读 · 1 评论 -
Pytorch 学习(二十四)----- 高级Tensor技巧(Advanced Indexing等多种操作)
总说这里记录一些比较难的操作:Advanced Indexing 可以用于赋值import torcha = torch.rand(5,5)x_indice = torch.LongTensor([1, 3, 4])y_indice = torch.LongTensor([2, 1, 1])value_put = torch.rand(3)*10print('Before')pr...原创 2020-02-18 11:04:10 · 1022 阅读 · 0 评论 -
Pytorch学习(二十三)---- 不同layer用不同学习率(高级版本)
简易版本,pytorch文档上,不同层用不同学习率,可以用这个。optim.SGD([ {'params': model.base.parameters()}, {'params': model.classifier.parameters(), 'lr': 1e-3} ], lr=1e-2, momentu...原创 2019-09-02 17:01:00 · 923 阅读 · 0 评论 -
Pytorch学习(二十二)soft label的交叉熵loss的实现(附加《信息论》基本知识)
总说参考的链接:https://blog.youkuaiyun.com/tsyccnhhttps://www.zhihu.com/question/41252833/answer/140950659先理解一下信息熵、交叉熵和相对熵先找一下交叉熵的定义:1)信息熵:编码方案完美时,最短平均编码长度的是多少。2)交叉熵:编码方案不一定完美时(由于对概率分布的估计不一定正确),平均编码长度的是多少...原创 2019-06-26 16:47:01 · 15298 阅读 · 0 评论 -
Pytorch学习 (二十一) ------自定义C++/ATen扩展
总说没办法, 出来混总是要还的, 不会写点底层代码没法混啊. 废话不多说, 简单来说, 有时候我们需要写一些自定义的操作, 这些操作如果用python写会很慢, 我们需要用CUDA写, 然后这些操作与python绑定, 以供python端调用.主要是简略拿出 https://pytorch.org/tutorials/advanced/cpp_extension.html 的东西, 根据实践,...原创 2019-03-27 22:42:28 · 8458 阅读 · 9 评论 -
Pytorch学习(二十) ------ 可能有用的代码合集
总说记录一些比较有用的pytorch代码(有些是自己写的, 有些是从网上看到的)目录提取网络特征(适用于sequential构建的网络)修改Pretrained的网络(如ResNet等)提取网络特征(适用于sequential构建的网络)class VGG16FeatureExtractor(nn.Module): def __init__(self): s...原创 2019-03-13 10:26:48 · 1897 阅读 · 0 评论 -
Pytorch学习(十九)--- 模型中buffer的使用
总说我们知道,pytorch一般情况下,是将网络中的参数保存成OrderedDict形式的。这里额参数其实包括2种。一种是模型中各种 module含的参数,即nn.Parameter,我们当然可以在网络中定义其他的nn.Parameter参数。;另外一种是buffer。前者每次optim.step会得到更新,而不会更新后者。例子class myModel(nn.Module):...原创 2018-08-24 14:23:54 · 15952 阅读 · 6 评论 -
Pytorch学习(十八)--- VQA种Dynamic网络的写法
VQA中常用的方法是Dynamic网络,就是一个网络的输出作为另一个网络的filter权重。fliter = nn.Conv2d(…)# 当然这样写诗错的filter.weight.data.fill_(network_output).filter.forward(image)正确写法:import torch.nn.functional as Fp = F.conv2...原创 2018-08-15 21:22:11 · 1077 阅读 · 0 评论 -
Pytorch学习(十七)--- 模型load各种问题解决
简单的模型load一般来说,保存模型是把参数全部用model.cpu().state_dict(), 然后加载模型时一般用 model.load_state_dict(torch.load(model_path))。 值得注意的是:torch.load 返回的是一个 OrderedDict.import torchimport torch.nn as nnclass Net_old(...原创 2018-08-02 18:22:56 · 78825 阅读 · 18 评论 -
Pytorch学习(十六)----获取网络的任意一层的输出
其实一般来说,如果一个net中,是一个Sequential直接把所有层全部包含起来的,那么不好获得其中任意一层的feature map(至少我还不知道。。, 比较简单的方法就是 在想要得到那一层的后面的网络,全部用另一个sequential包含起来。比如:import torchfrom torch.autograd import Variableimport torch.nncl...原创 2018-07-05 08:56:58 · 35190 阅读 · 4 评论 -
Pytorch学习(十五)------ 杂项知识汇总
总说记录一下一些小知识, 方便查用.(不断更新中) 1. 自定义RNN的写法: Implementation of Multiplicative LSTM 2. 自定义二阶梯度写法: How to implement customized layer with second order derivatives How to customize the double backward 3...原创 2018-05-15 15:29:45 · 816 阅读 · 0 评论 -
Pytorch学习(十四) ------- Pytorch 0.4代码迁移简要总结
总说由于pytorch 0.4版本更新实在太大了, 以前版本的代码必须有一定程度的更新. 主要的更新在于 Variable和Tensor的合并., 当然还有Windows的支持, 其他一些就是支持scalar tensor以及修复bug和提升性能吧. Variable和Tensor的合并导致以前的代码会出错, 所以需要迁移, 其实迁移代价并不大.Tensor和Variable的合并...原创 2018-04-27 12:27:10 · 10372 阅读 · 1 评论 -
Pytorch学习 ( 十三 ) ----- Pytorch自定义层出现多Variable共享内存错误
错误信息: RuntimeError: in-place operations can be only used on variables that don’t share storage with any other variables, but detected that there are 4 objects sharing it自动求导是很方便, 但是想想, 如果两个Variable...原创 2018-04-19 23:24:15 · 2977 阅读 · 1 评论 -
Pytorch学习 (十二) ----- Pytorch中如何使用Tensor Comprehensions
总说使用方式: 1. 定义TC语言, 然后传入 tc.define 2. 创建torch tensors(用不用Variable包起来都不影响, pytorch0.4版本都没必要加Variable, 直接tensor即可) 3. 跑这一层就行import tensor_comprehensions as tcimport torchMATMUL_LANG = """def ...原创 2018-04-08 13:21:29 · 1467 阅读 · 0 评论 -
Pytorch学习(十一)--- Tensor Comprehensions 初探
初衷其实, 有时候你会很难受. 因为你有一些想法, 在python端写会很慢, 写成cuda代码又有难度, 还要想着各种优化. 这时候你就不爽了,好不容易想到骚操作, 竟然因为写不来代码, 就泯灭这个想法吗. 这时候, 你可以看看Tensor Comprehesions(TC)这个包.先吹一波: TC是一个让你不用写高性能代码的包, 它会直接根据简单的语法来生成GPU代码. 如果你还在为...原创 2018-03-21 07:31:16 · 2321 阅读 · 2 评论 -
Pytorch学习(十)---解读Neural Style代码
pytorch版的neural style解读原创 2017-10-26 17:40:02 · 4604 阅读 · 10 评论 -
Pytorch入门学习(八)-----自定义层的实现(甚至不可导operation的backward写法)
pytorch自定义层,各种情况说明。原创 2017-10-25 20:36:48 · 23092 阅读 · 8 评论 -
Pytorch入门学习(九)---detach()的作用(从GAN代码分析)
detach()的作用分析原创 2017-09-19 22:22:34 · 38626 阅读 · 10 评论 -
Pytorch入门学习(七)---- 数据加载和预处理的通用方法
数据加载和预处理的通用方法原创 2017-08-03 21:33:29 · 24867 阅读 · 7 评论 -
Pytorch入门学习(六)--- 加载数据以及预处理(初步)--- 只为了更好理解流程
pytorch加载数据(初步)原创 2017-08-03 14:28:19 · 11109 阅读 · 3 评论 -
Pytorch入门学习(五)---- 示例讲解Tensor, Autograd, nn.module
Pytorch学习,直接看例子快速入门。原创 2017-05-09 12:35:03 · 9859 阅读 · 0 评论 -
Pytorch入门学习(四)---- 多GPU的使用
DataParrallelimport torch.nn as nnclass DataParallelModel(nn.Module): def __init__(self): super().__init__() self.block1 = nn.Linear(10, 20) # wrap block2 in DataParallel原创 2017-05-08 22:02:31 · 17509 阅读 · 2 评论 -
Pytorch入门学习(三)---- NN包的使用
pytorch和torch的对比。pytorch将所有的Container都用autograd替代。这样的话根本不需要用ConcatTable,CAddTable之类的。直接用符号运算就行了。 output = nn.CAddTable():forward({input1, input2}) 直接用output = input1 + input2 就行。真简单。原创 2017-05-08 21:00:48 · 11272 阅读 · 0 评论 -
Pytorch学习入门(二)--- Autograd
pytorch能自动反向传播。 前向传播时,能够自动记录每个操作的拓扑顺序,反向传播时则可以自动反向传播。VariableVariable是一个类,对是对tensor的一个wrapper。 有三个属性.data, .grad和.creator。如果是第一个运算节点,显然.creator是空,.grad只有调用.backward时候才会有。 require_grad可以指定某个variable原创 2017-04-30 17:00:28 · 10579 阅读 · 4 评论 -
Pytorch学习入门(一)--- 从torch7跳坑至pytorch --- Tensor
为什么入坑pytorch一般来说,入门一新坑,先会被众多“胡言乱语”所迷惑。于是我看了这些。。 1. ICLR2017的论文现在越来越多用pytorch了,而不是tensorflow了。ICLR-17最全盘点:PyTorch超越TensorFlow,三巨头Hinton、Bengio、LeCun论文被拒,GAN泛滥原创 2017-04-30 14:25:56 · 13148 阅读 · 0 评论