1.tensors的概念:
可以理解为多维数组。
和numpy数组很像,tensors数据类型可以在gpu或者是其他一些硬件上面运行。
tensor还可以和numpy共享地址,对二者其中任意一个修改,另一个也会修改。
tensor是自动微分的
创建tensor:使用torch.tensor()
1.可以传入一个列表
2.可以传入一个numpy数组
3.使用torch.rand_like()或者ones_like()
4.使用torch.rand()或者torch.ones根据输入型号创建,()中可以是元组、列表,但是不能是集合。
查看(tensor)张量是在cpu或者gpu上,可以使用张量名.device来查看
更多具体用法参考pytorch官方文档
tensor相关方法:
1.判断是否是tensor数据类型:torch.is_tensor(obj)
2.判断是否是浮点型:torch.is_floating_point
3.判断一个数据类型否是非零:torch.is_nonzero(obj)
ps:只能判断只含有一个数的tensor,如图,不是一个数的话会报错,不能比较
4.判断一个tensor数据类型里面含有多少个数:torch.numel(obj)
tensor的相关操作:
1.创建tensor:
- torch.as_tensor(obj) //obj可以是列表,元组,但转化过后不会自动打印dtype
- torch.from_numpy(obj) //创建一个从numpy转化来的tensor,会打印dtype
- torch.tensor(obj) //以上两种方法都可以直接用第三种,也不会打印dtype
2.创建全零tensor:torch.zeros(obj)||torch.zeros_like(obj):
zeros()的参数第一个是形状,可以是元组也可以是列表,第二个是类型dtype=
zeros_like()的作用是创建与传入对象形状一样的全零tensor
3.设置默认的初始化tensor数据类型:torch.set_default_tensor_type(type)
4.torch.arange/torch.range区别:
torch.arange(start,end,step):[strat,end) //可以只写一个参数,前闭后开
torch.range(start,end,step):[start,end] //至少写上start和end,前闭后闭
5.linspace//logspace
6.产生对角线全是1的矩阵:torch.eye()
7.产生一个全部由...填充的矩阵:torch.full()//torch.full_like()
8. tensor的拼接:torch.cat()
dim参数表示从哪个维度进行拼接,如果是二维的tensor即矩阵的话,dim=0表示在行上面做拼接,dim=1表示在列上面做拼接
9.将一个张量平均分成若干份:torch.chunk()
第一个参数是被分张量,第二个是分成块数,第三个是从哪个维度进行分块,默认是dim=0
10.改变tensor的形状:torch.reshape(input,shape)
当变成一维的时候,直接把shape设置成[-1],注意这里需要使用列表形式
11.torch.scatter:不是很理解有什么用
12.将tensor进行分块,可以均分,也可以传入列表按照列表每个元素进行分:torch.split()
13.对多余的维度进行压缩(移除掉维度为1的部分): torch.squeeze()
即保持维度的乘积不变,将A*B*1*C*1*D变成A*B*C*D
另外还可以指定压缩某个为1的维度:dim从0开始,这里只能设置为int,不能设置为列表,即一次只能指定一个维度被压缩。
14.在某个维度将两个相同大小的tensor堆叠起来,有维度的扩充:torch.stack(tensors,dim=)
15.先将tensor铺平,再从里面取出对应位置上的元素:torch.take()
16.在某个维度上进行复制:torch.tile()
如图将a的行复制3倍,列复制2倍,编程一个6*6的矩阵,如果保持某一维度不变则写成1
17.将tensor做维度转换,即矩阵的转置:torch.transpose()
一共有3个参数,第一个是传入的数,第二个和第三个是需要转换的维度
18.拆分tensor:torch.unbind(input,dim)
19.在某一个维度上进行增维:torch.unsqueeze(input,dim)
20.判断执行:torch.where(condition,x,y)
如果condition成立,则x,否则y,如图,在x>0的位置保留0,其余位置用y中的数字来填充
令y=1也可以
21.随机种子设定:torch.manual_seed
注意numpy、pytorch的设定,才能保证多次随机一样
22.根据传入的概率矩阵返回相同形状的0-1矩阵:torch.bernoulli()
23.根据均值、方差返回tensor:torch.normal()
24.返回[0,1)的tensor:torch.rand()
返回整数tensor:torch.randint(start,end,shape)
返回高斯分布的tensor,可正可负:torch.randh()
25.将[0,int-1]的数字进行随机排列:torch.randperm(int)