pytorch学习笔记之pytorch基础二(索引与切片、维度变换)

索引与切片

Indexing 直接索引

  • 以下方程序为例 ,首先创建的 tensor -> (4,3,28,28) 分别为batch_size ; channel ; h ; w
  • a[0] 索引代表 batch的每张图片的 channel , h , w
  • a[0,0] 索引代表 第一张图片第一个通道的 h和w
  • a[0,0,2,4] 索引代表 第一张图片第一个通道第2行4列像素点的值
    在这里插入图片描述

: 采样索引

  • 在下例中 , a[ :2] 代表前两张图片的 channel, h ,w
  • a[:2 , 1: , :, :] 代表前两张图片中最后一个通道的 h,w
  • 注: 如有两个冒号,第二个冒号后的数字代表隔位采样
    在这里插入图片描述

… 任意维度

  • … 代表取任意维度
  • 在下例中, a[…] 代表取所有维度 ; a[0,…] 代表取第一个图片的channel , h, w
    在这里插入图片描述

维度变换

.view( ) 合并维度

  • 采用 .view() 操作可以合并维度,但总size不变,也就是说只改变其意义,不改变其值
  • 如下例所示,a.view(4,28*28) 即是将 (1,28,28)的信息合并处理,在实际意义中就是将通道信息、图片的具体长、宽信息整和为一个特征,结果得到(4,784)的size ,常用于全连接层
  • a.view(4*1,28,28) 则是只关注图片的特征信息,而忽略是是哪张图片、哪个通道的信息
    在这里插入图片描述

Squeeze \ unsqueeze 删减 \ 增加维度

  • .unsqueeze( a ) -> 在a的前一个位置上增加一个维度(注,若a是负数,从后往前算,且是在其之后增加维度)
    在这里插入图片描述
  • squeeze(a) 删除维度的格式与 .unsqueeze( a ) 一样,但若不输入参数a,则会把所有为1的维度删除(挤压)掉
    在这里插入图片描述

expand / repeat 维度扩展

  • expand / repeat 两种方法效果差不多,但一般使用expand不使用 repeat
  • 两种方法只可以原来为1的维度转化为新的维度大小 (复制原来为1的内容,填充新的size)
  • expand 参数中的 -1 代表原来的维度,若写为 -1 ,代表是原来的维度大小不变
  • 注意,下例中的 -4为bug,虽然有输出,但无实际意义
    在这里插入图片描述
  • repeat 中的参数表示 该维度大小重复的次数,为 1 即为重复1 次
    在这里插入图片描述

Transpose / t / permute 转置

  • 可以直接使用 .t () 来求转置,但其只能运用于2D矩阵,对于3,4D数据不支持操作
    在这里插入图片描述
  • .transpose(a,b) 可以直接交换 a,b 维度的值,但会使数据不连续,所以常使用 .transpose(a,b).contiguous(),即通过 .contiguous() 函数将数据重新变得连续
    在这里插入图片描述
  • .permute(a,b,c,d) 函数可以转换每个维度的size,如下例所示,b.permute(0,2,3,1) 是将原来第二位的维度和最后一维的做了交换,初始的位置应为(0,1,2,3)
    在这里插入图片描述
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值