Pytorch实践学习笔记一(附可运行详细代码实例)

本文介绍了PyTorch的发展背景,重点阐述了模型训练的五大要素:数据处理、模型构建、损失函数、优化器以及迭代训练。同时详细讲解了PyTorch中的各种数据类型及其生成方法和属性,如张量(Tensors)、数据类型转换等。
摘要由CSDN通过智能技术生成

一、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())

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值