基本数据类型
- torch.Tensor是一种包含单一数据类型元素的多维矩阵
- https://www.youtube.com/watch?v=fCVuiW9AFzY
- tensor.float() 张量类型转换
- 一般使用LongTensor比较多
Torch定义了七种CPU tensor类型和八种GPU tensor类型:
torch数据生成
- 如numpy/pandas/pytorch这几个库,直接生成数据并不是刚需,因为数据的生成更多来自于read(),所以更多地是数据维度上的操作和变换
- 接收
- torch.tensor()参数
- 接收的是具体的数据
- torch.tensor会从data中的数据部分做拷贝(而不是直接引用),根据原始数据类型生成相应的torch.LongTensor、torch.FloatTensor和torch.DoubleTensor
- torch.tensor([1,2])
- torch.Tensor()参数 是默认张量类型torch.FloatTensor()的别名
- 既可以接收数据也可以接收维度分量也就是shape
- torch.Tensor([1,2])
- torch.Tensor(1)
- torch.FloatTensor()
- torch.LongTensor()
- 既可以接收数据也可以接收维度分量也就是shape
- torch.tensor()参数
- 生成
- torch.rand(100, 16, 784)
- torch.randn()
- torch.ones|zeros
- 查看数据维度
- f.dim()
- f.size()
- f.shape
矩阵转置
* torch.Transpose(Tensor, a,b) 转置
* transpose只能操作2D矩阵的转置。有两种调用方式。
* 连续使用transpose也可实现permute的效果。
* permute(0, 2, 1) 置换
* 将tensor的维度换位
tensor乘法
* torch.mul, torch.mm, torch.matmul
* https://blog.csdn.net/da_kao_la/article/details/87484403
* bmm
* batch1 = torch.randn(10, 3, 4)
* batch2 = torch.randn(10, 4, 5)
* res = torch.bmm(batch1, batch2)
* res.size()
* torch.Size([10, 3, 5])
*
view张量重塑
pytorch_reshape = t.view([6, 5, 4])
numpy_reshape = a.reshape([6, 5, 4])
import torch
a=torch.Tensor(2,3)
a
# 3.8686e+25 9.1836e-39 1.2771e-40
# 9.0079e+15 1.6751e-37 2.9775e-41
# [torch.FloatTensor of size 2x3]
# view()函数作用是将一个多行的Tensor,拼接成一行。
a.view(1,-1)
# 3.8686e+25 9.1836e-39 1.2771e-40 9.0079e+15 1.6751e-37 2.9775e-41
# [torch.FloatTensor of size 1x6]
expand
- torch.Tensor.expand(*sizes) → Tensor
- 返回张量的一个新视图,可以将张量的单个维度扩大为更大的尺寸。
squeeze()和unsqueeze()
- torch.squeeze()
- 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的数去掉第一个维数为一的维度之后就变成(3)行。squeeze(a)就是将a中所有为1的维度删掉。不为1的维度没有影响。a.squeeze(N) 就是去掉a中指定的维数为一的维度。还有一种形式就是b=torch.squeeze(a,N) a中去掉指定的定的维数为一的维度。
- torch.unsqueeze()
- 这个函数主要是对数据维度进行扩充。给指定位置加上维数为一的维度,比如原本有个三行的数据(3),在0的位置加了一维就变成一行三列(1,3)。a.squeeze(N) 就是在a中指定位置N加上一个维数为1的维度。还有一种形式就是b=torch.squeeze(a,N) a就是在a中指定位置N加上一个维数为1的维度
b=torch.Tensor(1,3)
b
3.3447e+30 6.1237e-43 5.9179e+32
[torch.FloatTensor of size 1x3]
b.squeeze(0)
3.3447e+30
6.1237e-43
5.9179e+32
[torch.FloatTensor of size 3]
b.squeeze(1)
3.3447e+30 6.1237e-43 5.9179e+32
[torch.FloatTensor of size 1x3]
c=torch.Tensor(3)
7.5589e+28
5.2839e-11
1.8888e+31
[torch.FloatTensor of size 3]
c.unsqueeze(0)
7.5589e+28 5.2839e-11 1.8888e+31
[torch.FloatTensor of size 1x3]
c.unsqueeze(1)
7.5589e+28
5.2839e-11
1.8888e+31
[torch.FloatTensor of size 3x1]
unsqueeze()与squeeze()作用相反。参数代表的意思相同。