Tensor
Pytorch的基本类型都是在Int,Double,Float等数据类型后加一个Tensor,但没String类型,解决办法:
- onehot编码,都是01矩阵——体现不了语言前后关联性
- word2vec等
在gpu上还有cuda类型
如果一个数据a是Tensor类型 -
type(a),a.type()查询数据类型 -
isinstance(a, torch.FloatTensor),合法化检验
维度是0的为标量,1的为张量,Pytorch0.3以下没有维度(dimention)为0的标量,自动为1
a.shape是成员,但a.shape()是成员函数 - 用.Tensor接受的是数据
- 用.FloatTensor接受的是维度,里面的数据是随机的
维度(dim)为2——[2,2]-2行2列
size/shape(形状,不是数据):[2,2]
Tensor存数据
torch.randn(2,3)-dim维度为2
dim2应用:batch[4,784]——[图片个数,每个图片的维数/数据]
dim3应用:文字处理[10,20,100],batch10,每次20句话,每句话100个数据/特征
dim4:应用于图片[b,c,h,w]——batch,图片通道数channel,高,宽
numel:Tensor占用内存大小
张量操作
numpy->torch torch.from_numpy(a)
- 小写tensor输入数据
- 大写Tensor和FloatTensor输入维度,shape或者数据-用[] (少用,输入数据可以直接用小写tensor)
初始化,不赋值 - enpty的值是随机的
- 建议用大写Tensor输入维度,小写输入数据
绿色标注表示大写不推荐
初始化忘记赋值,会出现随机数非常大,非常小的问题,造成bug,所以要记得赋值
torch.Tensor默认生成torch.FloatTensor数据
图为修改Tensor默认生成的FloatTensor->DoubleTensor
随机初始化
rand随机产生0~1之间的数值,不包括1torch.rand(3,3)->产生dim为2,shape为3的矩阵rand_like(a)->把a的shape取出来,再创建一个类似a的tensor
randint只能采样整数torch.randint(1,10,[3,3]),产生1-9的数。不包括10,左闭右开
正态随机分布
- tandn:产生N~(0,1)正态分布
- torch.normal产生的是一维的数,需要自己再reshape
矩阵赋值为同一个数
[]代表标量
[1]代表矢量,维度为1
Pytorch中的range被arrange代替,且都是左闭右开
等分函数linspace,给的是数目而不是步长logspace,10的多少次方
randperm:随机打散
有时需要人的顺序打散,分数不会打散,采用随机种子,例子中的idx