Pytorch学习01——Tensor介绍与创建

1、张量

1.1 pytorch和python的对比

  • python:int、float、tuple(元组)、string
  • pytorch:以tensor结尾,不同类型的tensor的维度不同
    例如:整型数字tensor维度为0,二维数组tensor的维度为2维

1.2 pytorch特殊地方

  • pytorch不支持string,可以用one-hot编码表示字符

  • 常见类型:float32对应pytorch:torch.FloatTensor
    int32对应pytorch:torch.IntTensor
    uint8对应pytorch:torch.ByteTensor(常用于判断两者是否相等)

1.3 基础语法

isinstance(a, b):如果a是类型b,则输出True


=====零维
torch.tensor(num):可以直接生成一个标量,标量维度为0

dimension:维度
a.dim() = len(a.shape):得到维度
a.shape和a.size()都可以得到torch.size([])
torch.size([x,y,z]):括号里有几个数字代表几维,数字大小为包含下层张量个数。
					以此为例,即有三维,三维里有x个二维,每个二维包含y个一维,每个一维包含z个数
a.type():得到的就是数据类型,即inttensor、floattensor那些


=====一维张量
torch.tensor([1.1, 2.2]):直接定义
torch.FLoatTensor(2):生成一个长度为2,维度为1的
一维张量(向量)用途:bias、linear input(将一张图片展成一维的)	
					比如一张图片28*28展成784输入


=====二维张量
torch.randn(2,3):生成正态分布(01)的23列矩阵
用途:linear input batch
	  比如图片输入(4784),4张图片输入,每张为784


=====三维张量
torch.rand(1,2,3):生成均匀分布(0~1)的三维矩阵
list(x):若x为torch.size([1,2,3]),可以直接转换为[1,2,3]
a.numel():元素个数。上面为例:1*2*3=6
用途:RNN input batch	
	[words,sentences,features]:输入几个句子,每个句子几个单词,每个单词用多少特征表示


=====四维张量
用途:CNN[b,c,h,w]四维刚好对应batch、channel、height、width

2、创建Tensor

2.1 tensor与Tensor

  • tensor接收现有数据
  • Tensor或FloatTensor接收数据维度
    或者用于接收数据时,需将数据[ ]

2.2 tensor的创建

=====import from list
例如:torch.tensor([2, 3.2])

=====import from numpy
例如:a = np.array([2, 3.3])
	 torch.from_numpy(a)

2.3 初始化tensor

=====未初始化:里面含有的是杂乱的数据,需要接着初始化。
		  否则容易出现问题:torch.nan, torch.inf
生成一维
torch.empty(1)
生成23列
torch.Tensor(2,3)
torch.IntTensor(2,3)
torch.FloatTensor(2,3)



=====随机初始化
rand/ rand_like/ randint
rand:生成数据符合[0,1]的均值分布
rand_like(a):生成shape同a
randint(min,max,[]):生成shape为[],数据min(可取),max(不可取)

randn:生成数据符合N(0,1)
例如:randn(3,3)
改变均值和方差:torch.normal(mean=torch.full([10],0),std=torch.arange(1,0,-0.1))
生成10个均值为0,标准差逐渐减小从10.1,然后可以reshape到想要的shape



=====指定初始化
full
torch.full([2,3],7)23列,7
torch.full([],7):标量7
torch.full([2],7):维度为1,长度为2的张量,元素值都是7

arange
torch.arange(0,10,2):010,步长为2.包括0但不包括10

linspace/logspace
torch.linspace(0,10,steps=4):010,取平均切割的四个数。包括010
	===>tensor([0.0000, 3.3333, 6.6667, 10.0000])
torch.logspace(0,-1,steps=10):0-1,取10个数(包括010),然后将其当作10的幂。(10作为base参数可以设置)
	===>tensor([1.0000, 0.7743, ···, 0.1000])

ones/zeros/eye
torch.ones(3,3):生成33列,元素值为1的矩阵
torch.ones_like(a):形状如a,元素值为1
torch.zeros(3,3):生成33列,元素值为0的矩阵
torch.eye(3,4):单位阵。如果不是方阵,针对此处
				[[1., 0., 0., 0.],
				[0., 1., 0., 0.],
				[0., 0., 1., 0.]]

randperm
randperm(10):随机打散,生成0-910个索引
			目的是为了在打散的同时能够保持原来对应的打散后仍然对应
例如:a = torch.rand(2,3)
	  b = torch.rand(2,2)
	  利用idx=torch.randperm(2)可以生成[0, 1][1, 0]
	  那么需要保持a[idx]和b[idx]同时使用
	  假设原来a的第一行对应b的第一行
	  [0,1]代表保持原来顺序不动
	  [1,0]代表a的原来第一行换到第二行,那么b原来的第一行也要换到第二行

2.4 默认类型

使用tensor和Tensor生成时,数据类型为默认tensor类型FloatTensor
可以修改:torch.set_default_tensor_type(torch.DoubleTensor)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值