【写在前面】:此专栏为本人在系统复习pytorch基础时写下的笔记,复习内容与进度参考一位在B站讲 深度学习的up主(deep_thoughts),此笔记旨在帮助小伙伴快速入门和复习pytorch相关知识,写得不好的地方多担待,可直接移步up主的视频学习。此专栏全程无盈利性质。
up主(deep_thoughts)个人主页:
https://space.bilibili.com/373596439spm_id_from=333.788.b_765f7570696e666f.2
13.torch.full()
传入一个shape和一个value,返回一个数据全为value的tensor。
data_tensor = torch.full([1,3,3,2],10)
print(data_tensor)
14.torch.full_like()
传入一个tensor和需要填充的value,返回一个shape和原tensor一样的tensor。
data_tensor1 = torch.full([1,3,3,2],10)
data_tensor2 = torch.full_like(data_tensor1,5)
print(data_tensor2)
15.torch.cat()
将多个tensor在特定维度上拼接起来,可传入多个tensor,注意各个tensor除了拼接的维度可以不一样之外,其余维度必须都是一样的。
data1_tensor = torch.rand(1,2,3,4)
data2_tensor = torch.rand(1,3,3,4)
data3_tensor = torch.rand(1,4,3,4)
data_tensor = torch.cat([data3_tensor,data2_tensor,data1_tensor],dim=1)
print(data_tensor.shape)
16.torch.chunk(input,chunks,dim=0)
将input tensor切片成多个tensor,数量为chunks个,沿着dim维度进行切分。维度与数量可以不整除。
data_tensor = torch.rand(3,2)
data1_tensor,data2_tensor = torch.chunk(data_tensor,2)
print(data_tensor)
print(data1_tensor)
print(data2_tensor)
print(data1_tensor.shape,data2_tensor.shape)
17.torch.gather(input,dim,index)
使用dim与index组合成坐标从input tensor中取数,组合成新的tensor。这个函数非常的抽象,官方介绍也很简介,接下来举例来帮助理解。
先看结果,再分析取数过程。
import torch
data_tensor = torch.tensor([[1,2],
[3,4]])
data2_tensor = torch.gather(data_tensor,1,torch.tensor([[0,0],
[1,0]]))
print(data_tensor)
print(data2_tensor)
运行代码会得到以下结果:
tensor([[1, 2],
[3, 4]])
tensor([[1, 1],
[4, 3]])
那么这是怎么得出来的呢。首先,根据dim与index的数据生成取数坐标。其中,dim为指定index的值为第几维度。例如:dim=1。则index的值全部为取数坐标的第一维度。那么就可以得到初始坐标。
#让我们先用index的值填入取数坐标中,其中x为未知
(x,0),(x,0)
(x,1),(x,0)
取数坐标中只有第0维度没有填,那它就按照行顺序填充即可。
(0,0),(0,0)
(1,1),(1,0)
最后根据取数坐标从input中取数即可。
tensor([[1, 1],
[4, 3]])
如果torch.gather(data_tensor,0,torch.tensor([[0,0],[1,0]]))
的话,那么取数坐标就是:
(0,0),(0,1)
(1,0),(0,1)
那么这么抽象的函数应用场景大吗,个人感觉还是挺大的,在多分类问题或是强化学习上,我们在最后一层上得到的特征的维度一般是b*d,那么就可以通过这个函数取出我们想要的概率。
参考视频:
https://www.bilibili.com/video/BV1YY4y1Q72M/?spm_id_from=333.337.search-card.all.click&vd_source=22d2e9248ebced70dfe28100e2f0f97a