一、Pytorch的诞生
2017 年 1 月,FAIR(Facebook AI Research)发布了 PyTorch。PyTorch 是在 Torch 基础上用 python 语言重新打造的一款深度学习框架。Torch 是采用 Lua 语言为接口的机器学习框架,但是因为 Lua 语言较为小众,导致 Torch 学习成本高,因此知名度不高。
二、Pytorch实现模型训练的 5 大要素
1、数据:包括数据读取,数据清洗,进行数据划分和数据预处理,比如读取图片如何预处理及数据增强。
2、模型:包括构建模型模块,组织复杂网络,初始化网络参数,定义网络层。
3、损失函数:包括创建损失函数,设置损失函数超参数,根据不同任务选择合适的损失函数。
4、优化器:包括根据梯度使用某种优化器更新参数,管理模型参数,管理多个参数组实现不同学习率,调整学习率。
5、迭代训练:组织上面 4 个模块进行反复训练。包括观察训练效果,绘制 Loss/ Accuracy 曲线,用 TensorBoard 进行可视化分析。
三、数据类型
pytorch是一个计算库,也有人说是深度学习库,那么计算库呢,肯定都是有自己的数据类型的。
另外pytorch都是围绕Tensors (张量)来进行计算的,Tensors 类似于 NumPy 的 ndarrays ,同时 Tensors 可以使用 GPU 进行计算。ndarrays 是不可以的,且只能存储在cpu中,但是Tensor可以,Tensor其实就是用来进行各种计算的数据结构,存储数据,且有各种各样的操作,增删改查之类的。pytorch其实就是一个功能接口,我们都需要从最基本的类开始设计,pytorch的每一个数据类型其实就是一个类,这个类会定义他的一些基本的数据,定义他的一些函数操作,比如乘法、加法、减法、乘法、梯度更新。所以,我们看待pytorch的数据类型的时候,可以从类的角度去看待它。
四、通过pytorch的函数生成数据类型
1、torch.randn(),返回一个包含了从标准正态分布中抽取的一组随机数的张量,函数返回FloatTensor的张量。
import torch
print(torch.randn(2,3))
print(torch.randn(2,3).type())
输出结果:
运行时可能会出现AttributeError: partially initialized module 'torch' has no attribute 'randn' (most likely due to a circular import)的报错,这是因为文件名与库名冲突,也就是说你的文件名可能设置为了torch.py,此时把文件名改掉就可以了。
2、torch.rand(),返回的是均匀分布,区间为(0,1),而randn是标准正态分布(均值为0,方差为1,即高斯白噪声)。
import torch
print(torch.rand(2,3))
print(torch.rand(2,3).type())
3、torch.eye(),返回一个二维张量,可用来生成单位矩阵。
import torch
print(torch.eye(2,3))
print(torch.eye(2,3).type())
4、torch.from_numpy(), 将numpy.ndarray转换为Tensor。此函数有很多限制。
import torch
import os
import numpy as np
a=np.random.randn(2,3)
tor=torch.from_numpy(a)
print(tor)
print(tor.type())
注意此时返回的是DoubleTensor类型。
5、torch.linspace(start,end,step) ,返回一个一维张量,设置一个起点,一个终点,再设置一个间隔,就会按照设置的间隔从起点到终点返回数据。返回数据类型是FloatTensor。注意,step只能是整数,start 和end可以随便设置,
print(torch.linspace(3,5,2))
print(torch.linspace(3,5,2).type())
此时返回的是FloatTentor类型。
6、torch.logspace(),返回一个一维张量,设置一个起点,一个终点,还需要设置一个返回元素数量,会按等间隔返回区间内所需数量的元素。也可以对数据进行按对数处理。
print(torch.logspace(3,5,10))
print(torch.logspace(3,5,10).type())
#以5为底对数据进行对数处理,默认为10
print(torch.logspace(3,5,10,5))
print(torch.logspace(3,5,10,5).type())
从10的3次开始到10的5次结束,默认以10为底对数据进行数据处理。
7、torch.ones(),返回一个全为1的张量
print(torch.ones(10))
print(torch.ones(10).type())
8、torch.randperm(),返回一个随机的整数排列,所以只能传入整数n,然后排列的元素小于n。
print(torch.randperm(10))
print(torch.randperm(10).type())
9、torch.arange(),这个也是返回一个一维张量,他的用法跟logspace类似,但是他没有底数,底数一直是10。
print(torch.arange(5))
print(torch.arange(2,5))
print(torch.arange(2,5,2))
print(torch.arange(2,5,0.5))
print(torch.arange(5).type())
print(torch.arange(2,5,0.5).type())
10、torch.zeros(),跟ones类似,返回值全为0。
print(torch.zeros(10))
print(torch.zeros(10).type())
11、torch.zeros_like(),此函数根据给定的一个张量生成与其维度一样的一个全0的张量。它可以生成任意维度。
a=torch.eye(2,3)
b=torch.ones(12)
print(torch.zeros_like(a))
print(torch.zeros_like(b))
print(torch.zeros_like(a).type())
12、torch.empty_like(),用法与zeros_like类似,它生成的张量是随机的。
a=torch.eye(2,3)
b=torch.ones(12)
print(torch.empty_like(a))
print(torch.empty_like(b))
print(torch.empty_like(a).type())
13、torch.full(),传入一个维度s,再传入一个值v,会生成一个维度为s,值全为b的张量,
print(torch.full((2,5),10))
print(torch.full((2,5),10).type())
14、torch.full_like()
print(torch.full((3,4),5))
print(torch.full_like(torch.full((3,4),5),6))
15、torch.as_tensor(),对于列表,元组,ndarray来说,这个过渡函数可以直接实现它们之间的转化。
import torch
import os
import numpy as np
a1=[1,2,3]
b=(1,2,3)
a2=[[1,2,3],[1,2,3]]
c=np.array([1,2,3])
print(torch.as_tensor(a1))
print(torch.as_tensor(b))
print(torch.as_tensor(a2))
print(torch.as_tensor(c))
print(torch.as_tensor(a1).type())
16、torch.rand_like(),返回区间为(0,1)之间的随机数。
a=torch.eye(2,3)
b=torch.ones(6)
print(torch.rand_like(a))
print(torch.rand_like(b))
print(torch.rand_like(a).type())
17、torch.randint(),返回一个填充了随机整数的张量,我们需要设置随机整数的范围和张量维度。
print(torch.randint(1,10,size=(12,)))
print(torch.randint(1,10,size=(2,3)))
print(torch.randint(1,10,size=(2,3)).type())
18、torch.randint_like(),根据给定的一个张量生成与其维度一样的张量。它可以生成任意维度。
a=torch.eye(2,3)
b=torch.ones(6)
print(torch.randint_like(a,1,10))
print(torch.randint_like(b,1,10))
print(torch.randint_like(a,1,10).type())
19、torch.randn_like()
a=torch.eye(2,3)
b=torch.ones(6)
print(torch.randn_like(a))
print(torch.randn_like(b))
print(torch.randn_like(a).type())
20、通过tensor函数生成数据类型,可以直接指定我们生成的数据类型。
a = torch.tensor([3, 2], dtype=torch.float32)
print(a.type())
a = torch.tensor([3, 2], dtype=torch.int32)
print(a.type())
a = torch.tensor([3, 2], dtype=torch.int64)
print(a.type())
a = torch.tensor([3, 2], dtype=torch.float64)
print(a.type())
五、Pytorch的各种数据类型的属性
1、torch.type()查看数据类型
a=torch.randn(2,3)
print(a.type())
#进行类型转换,重新开辟一段内存
a = a.type(torch.int64)
print(a.type())
2、torch.size()查看数据形状
a=torch.randn(2,3)
print(a.size())
a=torch.randn(2,)
print(a.size())
a=torch.randn(6)
print(a.size())
标签:附可,like,10,torch,张量,Pytorch,实例,print,type
From: https://blog.csdn.net/m0_73776435/article/details/136768715