pytorch入门

pytorch

1.pytorch中标量1.3的维度是0,常用的是loss。 而[1.3]的维度是1
tensor数据的维度dimension表示的就是有几行数据,而size(shape)表示的是这一行有几个数据。
在这里插入图片描述

  1. pytorch中4维tensor经常用于cnn中,四个维度[b,c,h,w]分别对应一次传入的图片数量,图片的色彩通道(rgb),图片的高和宽。
    在这里插入图片描述

  2. 小的torch.tensor([2.,3.2])接受的是数据,大写的torch.Tensor(2,3),或者torch.Floattensor(2,3)接受的是数据的维度。
    4.在这里插入图片描述

  3. rand会产生[0,1]的初始化数值,不包括1

  4. 索引中的冒号可以理解为箭头
    在这里插入图片描述

  5. 四种切片方式,如左边红框所示
    在这里插入图片描述
    两个冒号就是间隔采样

start:end:step
  1. 给具体的索引的采样方式
a.index_select(0,torch.tensor([0,2])).shape
# 第一个参数0表示选择抽取的维度是0,第二个参数表示选取的是该维度中的哪几个,这里表示的是选取的是第0,2张图片
  1. 三个点号任意长度的冒号(维度)
  2. 使用mask索引后 维度会变化
    在这里插入图片描述
  3. take方法 就是把tensor给flatten之后,变成1维nshape,再进行索引

在这里插入图片描述

tensor的维度变换

  1. view操作
    在这里插入图片描述
    会丢失维度信息 必须保持numel相同 也就是元素个数

  2. unsqueeze squeeze
    必须要注意序列号。负号容易混淆,注意正号是在之前插入,负号是在之后插入,对应关系如下图 尽量不要用负号
    在这里插入图片描述

  3. tensor的shape属性
    shape方法输出的size包含了两个信息,一个是tensor的维度,一个是维度的大小。
    比如(2,3)括号里有两个位置(数字)就表示这个tensor有两个维度,而这两个的位置的数字表示了在这个维度下有几个数字,或者说这个维度的大小。

    比如说

torch.Size([2])

size里面有一个数字,表示这个tensor的维度是1,数字的大小是2,表明在这个维度里有两个数字。
当在2这个位置前添加一个维度,变成了Size([1,2]),那么这个2的意思也变了,这个tensor就变成了两个维度,第一个维度的大小是1,第二个维度的大小是2,从直观角度来说,变成了一行两列的tensor,原来tensor中的两个元素变成了一行中的两个元素。而在2这个位置后添加一个维度,变成了Size([2,1]),那么2就表示第一个维度中元素的个数,也就是行的个数,1就表示第二个维度中元素的个数,也就是列的个数,而原本tensor中的元素也会按照新的规则排列。如下面代码

a = torch.tensor([1.2,2.3])
print(a.shape)
print(a)
b = a.unsqueeze(-1)
print(b.shape)
print(b)
c = a.unsqueeze(0)
print(c.shape)
print(c)
#输出
torch.Size([2])
tensor([1.2000, 2.3000])
torch.Size([2, 1])
tensor([[1.2000],
        [2.3000]])
torch.Size([1, 2])
tensor([[1.2000, 2.3000]])

进程已结束,退出代码0
  1. Expand 对维度上的大小进行扩张
    在这里插入图片描述
    1可以扩张成n,但是2,3不能扩张成n,因为没有指定扩张的规则
    -1表示不扩张

  2. Transpose在进行维度变化的时候 一定要跟踪住维度
    在这里插入图片描述

  3. permute会自动调用transpose
    在这里插入图片描述
    相当于直接指定顺序

broadcasting

在这里插入图片描述
是需要符合实际规则的

拼接

stack相当于在把两个tensor通过增加一个维度进行拼接
在这里插入图片描述
比如最后一个,把两个班级的成绩合并,用stack在最前面增加一个班级维度,而不是在学生的维度上叠加(把两个班32个学生叠加成64个)

concat叠加的维度可以不一致 但是stack不行
在这里插入图片描述

拆分

拆分操作分为两种 :一是按照指定的数量对指定的维度拆分,二是按照指定的长度对指定的维度拆分。 具体演示代码和结果如下:

c1 = torch.rand(32,8)
c2 = torch.rand(32,8)
c3 = torch.rand(32,8)

c = torch.stack([c1,c2,c3],dim=0)

print(c.shape)

c4, c5 = c.split([2,1],dim=0)
c6, c7, c8 = c.split([10,10,12],dim=1)  #按照指定的数量分割
c9, c10 = c.split(4,dim=2)   #按照长度分割

print(c4.shape)
print(c5.shape)
print(c6.shape)
print(c7.shape)
print(c8.shape)
print(c9.shape)
print(c10.shape)

#输出
torch.Size([3, 32, 8])
torch.Size([2, 32, 8])
torch.Size([1, 32, 8])
torch.Size([3, 10, 8])
torch.Size([3, 10, 8])
torch.Size([3, 12, 8])
torch.Size([3, 32, 4])
torch.Size([3, 32, 4])

进程已结束,退出代码0

tensor运算

在这里插入图片描述
clamp
限制上下的赋值在0~10
在这里插入图片描述

范数

取哪个维度上的范数 哪个维度就会消掉
在这里插入图片描述

在这里插入图片描述

argmax argmin

求出来的不是具体的数值,而是最大最小值的索引

在这里插入图片描述
这里argmax加了dim信息,就可以指定在哪个维度上进行求最大值的索引

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值