pytorch-tensor创建

前言

随着人工智能的不断发展,深度学习受到了广泛的追捧,在此,开始记录自己的Pytorch学习笔记,希望可以帮助到自己,可以帮助到大家。
本小节为学习笔记第一节:内容为Tensor的创建

一、Pytorch与Tensor

Pytorch是深度学习广受好评的两大框架之一(另一个是大名鼎鼎的TensorFlow),出于入门难易程度与学习研究的需要,我选择了Pytorch入门,以便快速地搭建自己所需要的模型。
Tensor是Pytorch中的重要数据类型,可以使用GPU进行加速计算。
Tensor在物理上对应张量,具体细节如下:
对于一个tensor,我们可以通过dim()函数查询其维度,对应于数学上则是:

  • dim=0 :标量,常用于代价函数/损失函数Loss计算
  • dim=1 :向量,用于一维特征与偏执Bias输入
  • dim=2 :矩阵,用于特征+批数输入
  • dim=3 :三维矩阵…,可用于RNN(句子、单词、编码)
  • dim=4 :四维矩阵,可用于CNN(图片数、通道数、高、宽)

同时可以通过shape成员变量或是size()函数查看Tensor形状,与numpy类似

二、Tensor的多种创建方法

1.引入库
代码如下(示例):

import torch
import numpy as np
import math

2.使用numpy创建
Tensor可以通过torch.from_numpy()接受一个np.array对象,完成形状与成员值与array一致的Tensor创建,类型也相互对应。
代码如下(示例):

array=np.array([9,4,6])
array2=np.ones(5)

a=torch.from_numpy(array)
b=torch.from_numpy(array2)
print(a,b) #类型与array一致,一般默认为double(float64类型)

3.使用List创建
与numpy类似,Tensor也可以使用List列表创建,常用于小数据量的输入创建

c=torch.tensor([9,5,2])

4.申请空间&未初始化创建
这类创建不常见,常出现NaN问题或INF问题,建议使用随机初始化。
在此添加一个更改Tensor默认类型的小代码,使用DoubleTensor可以在CV中提高精度

#1.4 申请且未初始化(少用)
d=torch.empty([2,3]) #二行三列的Tensor,未初始化
e=torch.FloatTensor(2,3) #float类型Tensor,未初始化,不要加[]否则类似1.2

#可以更改默认Tensor的类型(即torch.tensor的类型)
#不改为float
torch.set_default_tensor_type(torch.DoubleTensor) #更改为DoubleTensor

5.随机初始化
十分常用的创建方法,常用于输入初始化,噪声添加等环节。
随机分布有以下两种:
1 均匀分布rand,服从U分布
2 正态分布randn,服从正态分布N

#1.5 随机初始化
#均匀随机分布
f=torch.rand(3,3) #生成[0,1)之间的3行3列随机数,分布为均匀分布U
g=torch.rand_like(f) #生成和f一致shape的Tensor,_like都一致,随机分布为U,与rand一致
h=torch.randint(1,10,(3,3)) #生成[1,10)的3行3列的随机整数,只会产生整数,产生浮点使用torch.rand的运算(eg:*10)

#正态分布
i=torch.randn(3,3) #3行3列的标准正态分布
j=torch.normal(torch.tensor(10.),torch.tensor(2.)) #生成一个u=10,std=2的正态分布数
j=torch.normal(torch.full([10],10.),torch.full([10],2.)) #生成10个,可以用view进行改造shape

6.单元素Tensor创建

#1.6 生成单元素Tensor
k=torch.full([2,3],6) #2行3列全为6的Tensor
k=torch.full([],4)    #标量

7.等差Tensor创建
分为arange和linspace两大类方法,与numpy类似。
torch.arange(start,end,step)生成[start,end)之间的的等差数列,间隔为step。
torch.linspace和torch.logspace则是制定[start,end]之间的范围,与共steps个数的等差数列(包含首尾)

#1.7.1 生成递增递减
l=torch.arange(0,10,1) #[0,10)

#1.7.2 生成等分
m=torch.linspace(0,10,11) #生成[0,10]之间等间隔11个数[0,1,...,10]
n=torch.logspace(0,-1,11,base=math.e) #对0到-1进行分割,分割结果作为底数求幂得到的Tensor,base默认为10

8.ones/zeros/eye
与numpy类似,创建全1,全0,单位矩阵的Tensor

#1.8 ones/zeros/eyes
o=torch.ones(2,3) #2行3列
o=torch.zeros(3,3) #3行3列
p=torch.eye(3,3)  #单位矩阵I3
p=torch.eye(3,4)  #前三列与I3一致,第四列为0

9.randperm随机打乱
randperm可以使用种子算计打乱制定区间数,常用于打乱索引,从而shuffle数据

idx=torch.randperm(10) #随机打乱[0,10),可以用于索引打乱
feature=torch.rand(10,3)
label=torch.rand(10,3)

#开始打乱并且保持x与label匹配
feature=feature[idx]
label=label[idx]
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值