pytorch基础知识学习
文章目录
前言
介绍了基于pytorch的深度学习,介绍了pytorch表示的数据类型和数据的初始化方式,每一种数据类型的初始化方式均有例子说明,小白也能看懂
一、pytorch的数据类型
python | pytorch |
---|---|
Int | IntTensor of size() |
float | FloatTensor of size() |
Int array | IntTensor of size[d1,d2,d3…] |
Float array | FloatTensor of size[d1,d2,d3…] |
string | — |
- pytorch仅用于数据计算,不具备string的表示方式,一般采用独热码的形式进行表示
- One-hot
- Embedding:Word2vec或glove
需要注意的是对于相同的Tensor而言,放置在CPU中的Tensor和放置在GPU中的Tensor的数据类型是不一样
例如在cpu中的类型为:torch.FloatTensor
在Gpu中的类型则为:torch.cuda.FloatTensor
1.类型检验
代码如下(示例):
#新建立一个两维的Tensor,也就是建立一个随机的两行三列的Tensor
a = torch.randn(2,3)
a.type() #打印a的类型,可以得出a的类型为'torch.FloatTensor'
#也可以采用如下的方式
type(a) #python自带的方法只能显示为torch.Tensor,信息显示不完整
#判断一个参数的类型是否为假定的类型:
isinstance(a,torch.FloatTensor) #此时的结果为True
将cpu中运行的数据类型转换成gpu中运行的数据类型
#使用上面创建的Tensor,a
isinstance(a,torch.cuda.FloatTensor) #结果为False
#转换,使用cuda()函数可以返回一个Tensor的cuda数据类型
a = a.cuda()
isinstance(a,torch.cuda.FloatTensor) #返回的值为True
2.数据类型介绍
- 标量
表示一个维度为0的Tensor,采用如下的方式进行初始化:
初始化一个数字为1的标量
torch.tensor(1.)
#查看标量的形状
a.shape #输出的结果为torch.Size([])
#使用len()函数查看
len(a.shape) #结果为0
#使用size()函数查看
a.size(). #结果为torch.Size([])
- 维度为一的张量
#初始化
torch.tensor([1.1]) #数据的结果为tensor([1.1000])
#使用FloatTensor(),随机生成指定个数的Tensor
torch,FloatTensor(2) #得到结果为tensor([3.2,4.6])
#使用numpy的方式进行生成
data = np.ones(2) #此时data的类型为array([1.,1.])
torch.from_numpy(data)
tensor([1.1,1.1],dtype=torch.float64)
- 维度为2的张量
#初始化
a = torch.randn(2,3) #初始化一个2行3列二维张量
#查看a的形状
a.shape #输出为torch.Size([2,3])
a.size(0) #输出的结果为2
a.size(1)#输出的结果为3
a.shape[1]#输出的结果为3
6.维度为3的张量
a = torch.rand(1,2,3)
a.shape #结果为torch.Size([1,2,3])
a[0]#可以找到后面两维度的第一个值
list(a.shape) #结果为[1,2,3]
- 维度为4的张量
a = torch.randn(2,3,28,28)
3.补充
- 得到数据的个数
#初始化张量
a = torch.randn(2,3,28,28)
#求出a含有的数据个数
a.numel() #计算的结果为2 * 3 * 28 * 28
#得到a的维度
a.dim() #结果为4
二、创建Tensor
1.从numpy创建
import numpy as np
import torch
a = np.array([2,3.3])
a = torch.from_numpy(a) #得到的结果为Tensor([2.0000,3.3000],dtype =Float64)
b = np.ones([2,3])
b = torch.from_numpy(b)
#得到的结果为tensor([[1,1,1],[1,1,1]],dtype= float64)
2.初始化Tensor
- Torch.empty(d1,d2,d3)
- Torch.FloatTensor(d1,d2,d3)
最好不要是使用直接的数据进行初始化,例如Torch.FloatTensor([1,2,3])这种行为应该被禁止 - Torch.IntTenssor(d1,d2,d3)
使用上述的方法进行初始化的时候,只是作为一个数据大小进行了占位,并没有实际的数据进入,未初始化的数据包含的数据大小是随机的,所以在后续操作中,应当对数据进行填充。
3.设置默认的数据类型
#未更改默认数据类型时,默认的数据类型为floatTensor
torch.tensor([1.2,3]).type() #此时的数据类型为floatTensor
#更改默认的数据类型
torch.set_default_tensor_type(torch.DoubleTensor)
torch.tensor([1,.2,3]).type() #此时的数据类型为torch.DoubleTensor
4.随机设置Tensor
- rand函数:
初始化数据范围:[0,1] 均匀分布
使用例子:torch.rand(2,3)生成一个随机的2* 3的Tensor - randint(min,max,[2,3])
前面规定范围,后面实现对于形状的要求 - randn()正态分布(0,1)之间波动
- full()函数,将tensor中的数据全部赋值为同一个值
torch.full([2,3],7)此时将tensor中的数据全部为2 * 3的全部为7的Tensor
torch.full([2,3],7)#生成一个2 * 3的全为7的Tensor
torch.full([],7)#生成标量7
torch.full([1],7)#生成一个向量7
#生成等差数列
torcha.arrange(0,10,2) #生成的结果为 tensor([0,2,4,6,8])