【pytorch11】高阶操作

高阶操作

  • Where
  • Gather

where

三个参数,第一个是condition,第二个参数是源头A,第三个参数是源头B,也就是说有两项数据A和B,C有可能来自于A也有可能来自于B,如果全部来自于A的话直接赋值给A,如果部分来自A的话可以例如C[0]=A[0],C[1]=B[1],如果C[0,0,1]=A[0,0,1],C[0,0,2]=B[0,0,2],C[0,0,3]=A[0,0,3]说明C的来源是比较乱的,没有一个特别好的规律,把这个乱的规则写在condition表里,condition的shape与A和B是一样的


为什么需要这个操作?

没有一个很好规则来帮助你赋值,简单的复制方法是不可行的,使用Python的逻辑控制比如for,比如用双重for循环加条件语句C[i,j]=A[i,j],但是存在一个问题,这段代码是运行在CPU上的就没有GPU的加速功能,因此要完成这样一个简单的分别采样或者分别取值的过程,照python代码的情况是用CPU控制的没有并行,生成一个condition,赋值语句就可以高度并行化

例如有一个场景,有一张表存储的是动物的名字[dog,cat,whale],但是pytoch是没有string类型的这里只是示意,通过神经网络得到相对编号的索引比如说第一个动物得到的索引是1那就意味着是cat,第二个动物对应的索引是0那就是对应的dog,第三个动物对应的索引是1,第四个动物得到的索引是2,即[1,0,1,2],表一共有3个种类,但是我们要查4次操作,所以查表的操作会生成[cat,dog,cat,whale]所以生成的shape和你提供要查找的shape是一样的,这个查表的操作是一个收集的操作,根据1收集索引为1的cat以此类推,因此这就是gather设计的初衷,gather([dog,cat,whale],dim=0,[1,0,1,2]),通过这三个参数就可以很好的生成查表的操作,pytorch矩阵运算没有这种操作可以完成这个功能,因此gather设计为了GPU的方式实现这个功能


相关推荐
小锋学长生活大爆炸4 小时前
【知识】torchrun 与 torch.multiprocessing.spawn 的对比
人工智能·pytorch
人肉推土机4 小时前
大模型最新面试题系列:深度学习基础(一)
人工智能·pytorch·语言模型·面试·ai编程
lyyiangang17 小时前
记一次pytorch训练loss异常的问题
人工智能·pytorch·python
Colinnian20 小时前
pytorch阶段性总结1
人工智能·pytorch·python
code_talking1 天前
Python学习第十七天之PyTorch保姆级安装
人工智能·pytorch·python·conda
马圈圈马1 天前
服务器间迁移conda环境
运维·服务器·pytorch·深度学习·conda
有什么东东1 天前
山大软院ai导论实验之采用BP神经网络分类MNIST数据集
人工智能·pytorch·深度学习
weixin_307779131 天前
用PySpark和PyTorch实现跨境支付Hive数据仓库的反洗钱数据分析
pytorch·python·spark
zhulu5061 天前
PyTorch 源码学习:GPU 内存管理之深入分析 CUDACachingAllocator
人工智能·pytorch·学习
Z-Chelsea1 天前
Ubuntu 20.04环境下安装cuda、cuDNN和pytorch
linux·pytorch·ubuntu