PyTorch入门实战教程笔记(六):基础张量操作3

PyTorch入门实战教程笔记(六):基础张量操作3

包括:Broadcasting自动扩展、合并与分割

Broadcasting自动扩展:

特点:Expand(自动的)、without copying data。
  比如,现在有一个张量A、B,将B扩展成与A相同的维度,假设A是feature map,B为偏置,A[4,32,14,14],B:[32],那么怎么办呢,可进行如下图扩展,要注意,扩展一定是先从小维度开始,再到高维扩展(倒着写): 在这里插入图片描述
  扩展后就可以直接相加,来看一个形象点的,比如下图:可以把Broadcasting理解为插图一个新的维度,扩展为相同的shape。在这里插入图片描述
  具体意义:比如现在有一个学校:[class, students, scores],而因为某种原因,需要给每个同学都加上5 score,我们知道,如果[4, 32, 8] + [4, 32, 8]是可以直接相加的,但是[4, 32, 8] + [5.0]就没法进行,复杂的方法:就得需要 .unsqueeze(0).unsqueeze(0)插入维度,得到[1,1,1],然后通过expend扩展为[4, 32, 8],此外,如果用repeat还有一个内存消耗的问题,比如5.0分占一个字节,那么通过repeat扩展为[4,32,8]就1024B,也就是内存扩大了1000倍,而用Broadcasting能够自动扩展且无内存消耗。
在这里插入图片描述

合并与分割:

  • cat:合并
  • stack
  • split
  • chunk
    cat:
      cat(),一共有两个参数,一个list,list包含了所有需要统计的Tensor,一个dim,决定了我们在哪一个维度上进行合并。比如说现在有两个老师,一个负责1-4班,一个负责5-9班,那么想把他们两个班的学生合并一下,可以这样操作:
      在这里插入图片描述
      再比如,在神经网络中要级联数据,要注意,cat()需要dim是一样的,要cat的dim可以不一样,但是其余的一定要一样,要不需要进行零填充。那就可以进行如下操作:
    在这里插入图片描述
      对于具体的图像处理,四个维度:Batchsize、channel、H、W,始终要记得一个原则,就是对应的dim不一致,那只能在这个dim上合并,而不能在其他上面合并,比如[4,3,32,32]和 [5,3,32,32]在第‘0’个序列号上合并,可以得到9张图片。[4,3,32,32]和[4,1,32,32]在第‘1’个序列号上合并,比如RGB和D(T),即彩色图像和深度或者红外图像合并。[4,3,16,32]和[4,3,16,32]在第‘2’个序列号上合并,可以将图像的行拼接起来。如下图代码操作:
    在这里插入图片描述
    Stack:create new dim
      假设现在有a = torch.rand[32,8]和b = torch.rand[32,8],那么用stack在‘0’序列上合并,就会生成size为[2,32,8],当序列为‘0’时,代表a,当序列为‘1’时,代表b。就比如说有两个班,每班32个学生,每个学生有8门成绩,如果用cat就成[64,8],显然是不对的,没有区分开两个班级,但是用stack就可以在创建一个班级的维度。并且在使用stack之前,所有维度必须一致。
      在这里插入图片描述
    Split:
      Split主要有两个参数,第二个按照哪个dim拆分,第一个参数有两种,①指定的一个数比如x,假设要拆分的维度有n个数据,那么拆分结果就是一组有n/x(前提是整数)个数据。②给定一个列表,假设要拆分的维度的数据为6个,给定的列表为[1,2,3],那拆分结果为1个数据一组,2个数据一组,3个数据一组。如下:
    在这里插入图片描述
    Chunk:chunk其实与split类似,只不过第一个参数指的是每一组拆分的数据的个数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值