Pytorch介绍以及基本使用、深入了解、案例分析。(上)

简介: Pytorch介绍以及基本使用、深入了解、案例分析。(上)

前言


Pytorch是torch的python版本,是由Facebook开源的神经网络框架,专门针对 GPU 加速的深度神经网络(DNN)编程,相比于Tensorflow,Pytorch简介易用。


一、为什么选择Pytorch


简洁:PyTorch的设计追求最少的封装,尽量避免重复造轮子。PyTorch的源码只有TensorFlow的十分之一左右,更少的抽象、更直观的设计使得PyTorch的源码十分易于阅读。

速度:PyTorch 的灵活性不以速度为代价,在许多评测中,PyTorch 的速度表现胜过 TensorFlow和Keras 等框架。

易用:PyTorch 是所有的框架中面向对象设计的最优雅的一个。PyTorch的面向对象的接口设计来源于Torch,而Torch的接口设计以灵活易用而著称。

生态丰富:PyTorch 提供了完整的文档,循序渐进的指南,此外 ,相关社区还在逐渐壮大。


二、Pytorch的基本使用


2-0、张量的定义


张量:张量是一种特殊的数据结构,与Numpy中的arrays非常相似,在Pytorch中,我们使用张量对模型的输入和输出以及模型的参数进行编码。最重要的是,数据转化为张量可以方便在GPU上运行,这样运行速度可以大大加快。

注意:Tensors和Numpy中的数组具有底层内存共享,意味着不需要进行复制直接就可以相互转化。


2-1、直接创建张量


2-1-1、torch.Tensor()

import torch
torch.Tensor([1, 2, 3])
# 涉及到的参数
# data:data的数据类型可以是列表list、元组tuple、numpy数组ndarray、纯量scalar(又叫标量)和其他的一些数据类型。
# dtype:该参数可选参数,默认为None,如果不进行设置,生成的Tensor数据类型会拷贝data中传入的参数的数据类型,比如data中的数据类型为float,则默认会生成数据类型为torch.FloatTensor的Tensor。
# device:该参数可选参数,默认为None,如果不进行设置,会在当前的设备上为生成的Tensor分配内存。
# requires_grad:该参数为可选参数,默认为False,在为False的情况下,创建的Tensor不能进行梯度运算,改为True时,则可以计算梯度。
# pin_memory:该参数为可选参数,默认为False,如果设置为True,则在固定内存中分配当前Tensor,不过只适用于CPU中的Tensor。

输出

926a3cc485914aa38834c0a07d360ec7.png


2-1-2、torch.from_numpy()

# notice: 当然我们也可以直接将numpy数组直接转化为Tensor
import torch
import numpy as np
t1 = [1, 2, 3]
np_array = np.array(t1)
data = torch.from_numpy(np_array)
print(data)


输出


926a3cc485914aa38834c0a07d360ec7.png

2-2、创建数值张量

2-2-1、torch.ones()

# 创建全1张量。
torch.ones((2,4))


输出


3ef4222a71f34af99bc727286488fb33.png


2-2-2、torch.full()

torch.full([2,3],2.0)
参数:
# size: 定义了输出张量的形状。
# full_value: 定义填充的值。


输出

8d5c6a006d7f4a508eb50e14dc094c98.png

2-2-3、torch.arange()


# 创建等差数列
torch.arange(0, 10, 2)
参数:
start: 等差数列开始。
end: 等差数列结束。
steps: 等差数列的差是多少。


输出

b5b9e8625f1549acb9a601e3e04c948a.png


2-2-4、torch.linespace()

# 创建线性间距向量
torch.linspace(2, 10, 5)
# 参数:
# start: 起始位置
# end: 结束位置
# steps: 步长
# out: 结果张量


输出

97304a61720c4fd1ada55e8aa3bde208.png

2-2-5、torch.eye()


# 创建对角矩阵
# 即生成对角线全为1,其余部分全为0的二维数组
torch.eye(10,3)
# 参数:
# n: 行数
# m: 列数
# out: 输出类型,即输出到哪个矩阵。


输出


a8fe83afb0564e74a2d65cb8813cff5c.png


2-3、根据概率创建张量

2-3-1、torch.randn()

# 创建随机值
# 与rand不同的是,它创建的是包含了从标准正态分布(均值为0,方差为1)中取出的一组随机值。
torch.randn(4)
# 参数
# size: 定义了输出张量的形状
# out: 结果张量


输出


d3b1553411ff4c788d7e7eb93c57efef.png

2-3-2、torch.randint()

# 返回一个填充了随机整数的张量,这些整数在low和high之间均匀生成。张量的shape由参数size定义。
torch.randint(100,size=(10,10))
# 参数说明:
# 常用参数:
# low ( int , optional ) – 要从分布中提取的最小整数。默认值:0。
# high ( int ) – 高于要从分布中提取的最高整数。
# size ( tuple ) – 定义输出张量形状的元组。
# 关键字参数:
# generator ( torch.Generator, optional) – 用于采样的伪随机数生成器
# out ( Tensor , optional ) – 输出张量。
# dtype ( torch.dtype , optional) – 如果是None,这个函数返回一个带有 dtype 的张量torch.int64。
# layout ( torch.layout, optional) – 返回张量的所需布局。默认值:torch.strided。
# device ( torch.device, optional) – 返回张量的所需设备。默认值:如果None,则使用当前设备作为默认张量类型(请参阅torch.set_default_tensor_type())。device将是 CPU 张量类型的 CPU 和 CUDA 张量类型的当前 CUDA 设备。
# requires_grad ( bool , optional ) – 如果 autograd 应该在返回的张量上记录操作。默认值:False。

输出


a224d6f1884f464db76c060e30b1df5c.png



2-3-3、torch.rand()


# 创建随机值,包含了从区间(0,1)的均匀分布中抽取的一组随机数
# 均匀分布
# torch.rand(*sizes, out=None)
torch.rand(4)


输出


60a0646edf7f41ba8528d65fd4004be7.png


2-3-4、torch.normal()

torch.normal: 生成正态分布

四种模式:

1、mean为标量,std为标量。

2、mean为标量,std为张量。

3、mean为张量,std为标量。

4、mean为张量,std为张量。

# mean为标量,std为标量,这种模式必须加size参数
torch.normal(0, 1, size=(4,5))

输出


74dec624b20246bcbaafcf91bcfd5a5d.png


2-4、张量的一些运算操作:拼接、切分索引变换

2-4-0、判断电脑是否有GPU

# 如果没有这一步可以直接略过
# 判断当前环境GPU是否可用, 然后将tensor导入GPU内运行
if torch.cuda.is_available():
  tensor = tensor.to('cuda')

2-4-1、torch.ones_like函数和torch.zeros_like函数

input = torch.rand(4, 6)
print(input)
# 生成与input形状相同、元素全为1的张量
a = torch.ones_like(input)
print(a)
# 生成与input形状相同、元素全为0的张量
b = torch.zeros_like(input)
print(b)


输出

139f1c78c4f441f9a285bd22073275f1.png



2-4-2、torch.cat函数

# 生成一个两行三列的全1张量。
t = torch.ones((2,3))
# 拼接函数cat
# 在给定维度上对输入的张量进行连接操作
torch.cat([t,t], dim=0)
# 参数
# inputs : 待连接的张量序列,可以是任意相同Tensor类型的python 序列
# dim : 选择的扩维, 必须在0到len(inputs[0])之间,沿着此维连接张量序列。


输出

tensor([[1., 1., 1.],

[1., 1., 1.],

[1., 1., 1.],

[1., 1., 1.]])

2-4-3、torch.stack函数

# 拼接函数stack
# 与cat不同的是,stack会增加维度。 简单来说就是增加新的维度进行堆叠。
# 扩维拼接!
torch.stack([t,t], dim=1)
# 参数
# inputs : 待连接的张量序列,可以是任意相同Tensor类型的python 序列
# dim : 选择的扩维, 必须在0到len(inputs[0])之间,沿着此维连接张量序列。

输出

f5ae251134504a4eb6815ef456dbcf49.png

2-4-4、torch.chunk函数

t = torch.ones((2,5))
# 在给定维度上将输入张量进行分块
torch.chunk(t, dim=1, chunks=5)
# input:被分块的张量。
# chunks:要切的份数。
# dim:在哪个维度上切分。


输出

9ce966b564034fc88a1cf4e5f6699aaf.png

2-4-5、torch.split函数

# 将tensor分成块结构
torch.split(t, [1,1,3], dim=1)
# input:待输入张量
# split_size_or_sections: 需要切分的大小,可以为列表或者数字。
# dim:切分维度


输出


7a8e22fea3594414868e5e6c51dd58eb.png

2-4-6、torch.squeeze函数

# 返回一个删除了所有大小为1的输入维度的张量。
# 例如:如果输入为(A✖B✖1✖C),则输出张量为(A✖B✖C)
# input: 输入张量
# dim: 如果给定,则输入只会在这个维度上挤压。

2-4-7、自动赋值运算

# 自动赋值运算通常在方法后有 _ 作为后缀, 例如: x.copy_(y), x.t_()操作会改变 x 的取值。
print(tensor, "\n")
tensor.add_(5)
print(tensor)


523e5fb78ec54e2292f613931d88c1c6.png

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
机器学习/深度学习 数据可视化 PyTorch
【PyTorch】TensorBoard基本使用
【PyTorch】TensorBoard基本使用
235 0
|
11天前
|
机器学习/深度学习 监控 PyTorch
深度学习工程实践:PyTorch Lightning与Ignite框架的技术特性对比分析
在深度学习框架的选择上,PyTorch Lightning和Ignite代表了两种不同的技术路线。本文将从技术实现的角度,深入分析这两个框架在实际应用中的差异,为开发者提供客观的技术参考。
32 7
|
5月前
|
机器学习/深度学习 算法 PyTorch
【从零开始学习深度学习】38. Pytorch实战案例:梯度下降、随机梯度下降、小批量随机梯度下降3种优化算法对比【含数据集与源码】
【从零开始学习深度学习】38. Pytorch实战案例:梯度下降、随机梯度下降、小批量随机梯度下降3种优化算法对比【含数据集与源码】
|
1月前
|
机器学习/深度学习 数据采集 自然语言处理
【NLP自然语言处理】基于PyTorch深度学习框架构建RNN经典案例:构建人名分类器
【NLP自然语言处理】基于PyTorch深度学习框架构建RNN经典案例:构建人名分类器
|
5月前
|
机器学习/深度学习 自然语言处理 PyTorch
【从零开始学习深度学习】34. Pytorch-RNN项目实战:RNN创作歌词案例--使用周杰伦专辑歌词训练模型并创作歌曲【含数据集与源码】
【从零开始学习深度学习】34. Pytorch-RNN项目实战:RNN创作歌词案例--使用周杰伦专辑歌词训练模型并创作歌曲【含数据集与源码】
|
5月前
|
机器学习/深度学习 资源调度 PyTorch
【从零开始学习深度学习】15. Pytorch实战Kaggle比赛:房价预测案例【含数据集与源码】
【从零开始学习深度学习】15. Pytorch实战Kaggle比赛:房价预测案例【含数据集与源码】
|
5月前
|
机器学习/深度学习 自然语言处理 PyTorch
【从零开始学习深度学习】48.Pytorch_NLP实战案例:如何使用预训练的词向量模型求近义词和类比词
【从零开始学习深度学习】48.Pytorch_NLP实战案例:如何使用预训练的词向量模型求近义词和类比词
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch搭建循环神经网络(RNN)进行文本分类、预测及损失分析(对不同国家的语言单词和姓氏进行分类,附源码和数据集)
PyTorch搭建循环神经网络(RNN)进行文本分类、预测及损失分析(对不同国家的语言单词和姓氏进行分类,附源码和数据集)
261 1
|
机器学习/深度学习 PyTorch 算法框架/工具
机器学习框架PyTorch详解和案列分析
PyTorch 是一个基于 Python 的机器学习框架,由 Facebook 于 2016 年发布。它提供了一组灵活且高效的工具,可用于构建和训练各种深度学习模型。PyTorch 的核心组件是张量,它是一个多维数组,可以用于存储和处理数据。PyTorch 的张量与 NumPy 的数组类似,但也提供了 GPU 加速和自动微分等功能。PyTorch 使用动态计算图,这意味着在运行时可以修改计算图,从而允许更灵活的模型构建和调试。这与 TensorFlow 等框架的静态计算图不同。PyTorch 支持自动微分,可以方便地计算张量的梯度。这为构建和训练深度学习模型提供了便利。PyTorch 提供了构
425 0
|
PyTorch 算法框架/工具 Python
【PyTorch】Transforms基本使用
【PyTorch】Transforms基本使用
87 0