PyTorch结构、架构介绍

torch是什么?
Torch是一个科学计算框架,广泛支持将GPU放在首位的机器学习算法。
PyTorch是由facebook研究院退出的一个基于Torch的,开源的python机器学习库。
pytorch中的torch主要功能:定义多维张量(Tensor)结构及基于张量的多种数学操作。

torch.Tensor主要功能:

定义tensor类型,包含7种CPU tensor类型和8种GPU tensor类型(整型、浮点型)(8/16/32/64位)
实现基于Tensor的各种数学操作、各种类型的转换。比如相加、相乘、求绝对值等
torch.Storage主要功能:管理Tensor的存储

比如是以byte还是char类型存储在计算机中,就由这个库来管理。
以CPU类型还是GPU类型存储。一般情况以CPU类型存储,想要用cuda加速的话必须把模型和数据同时以GPU类型存储。 变量名.cuda()

torch.nn包含多种子类:
torch.nn.Parameter():Variable的子类,用于管理网络的参数,默认requires_grad=True.
torch.nn.functional:集合了损失函数,激活函数,标准化函数等函数
torch.nn.init:初始化各种参数
容器(Containers):
**torch.nn.Module:**所有网络的基类,操作者的模型也应该继承这个类。继承后自动注册该网络。
前向传播
梯度记录(用于反向传播)
**torch.nn.Sequential:**时序容器,可以更方便的搭建网络,把已有的网络层往里面放即可。
网络层:
torch.nn.Linear:全连接层
torch.nn.Conv1\2\3d:卷积层,有一维二维三维
torch.nn.XXXPool1\2\3:池化层,最大池化、平均池化等等,一维二维三维
函数包:torch.nn.functional
torch.nn.functional.(Activations):激活函数,包括ReLU、softmax等

torch.nn.functional.Nomalization:标准化(归一化)层,1d2d3d

torch.nn.functional.LossFunctions:损失函数,L1Loss、MSELoss(均方误差)、CrossEntropyLoss(交叉熵)…

搭建好的网络:
torch.nn.RNN:卷积神经网络
torch.nn.LSTM:长短期记忆人工神经网络

torch.autograd:
主要功能:对可求导的Variable变量进行求导。
torch.optim:
optim是什么:一个实现了各种优化算法的库。
主要功能:对需要优化的参数(必须是Variable对象)进行求导。
torch.cuda:
主要功能:实现了与CPU张量相同的功能,但使用GPU进行计算。
torch.utils:
torch.utils.data.Dataset:
主要功能:创建、保存数据集。
torch.utils.data.DataLoder:
主要功能:包含对数据集的一些操作,比如batch操作(每次取数据集中的一小批),shuffle操作(随机取样)。
torchvision
简介:包含了目前流行的数据集,模型结构和常用的图片转换工具。其实是基于pytorch中的torch实现的图像处理包。

PyTorch结构、架构介绍

提到pyTorch, 大家对它的印象肯定是在python上的一个机器学习库。大家对它的认识都是正确的,但我们在使用python导入库时,导入的却是Torch而不是pytorch,可能有一些跟我一样热爱学习的人就会想,为啥我用pytorch库,导入的却是torch呢。
其实torch本身就是一个科学计算框架,一开始并不支持python。而pytorch呢则是facebook研究院推出的一个基于Torch框架的,开源的python机器学习库。就是说成功把Torch移植到python上了,所以叫它pytorch。

按照官方手册,将pytroch分成了torch和torchvision两大块,但是torchvision其实是基于torch开发的,专门处理计算机视觉或者图像方面的库,所以我们主要还是分析torch这个包。
torch这个包就是pytorch库的主体了,它主要实现了对Tensor结构的多钟数学操作,比如切片之类的。然后这个包还包括了下面很多个包。
因为整个torch操作的大部分数据类型都是Tensor,所以torch.Tensor呢可以说是整个torch的结构基础,在这个包里定义了tensor这个数据结构,包括tensor的维度啊,tensor里面数据是整型还是浮点型啊。
下面这个Storage则是torch的存储基础,这个包管理着数据要怎么存放在硬件里面,比如是以bite的形式存储啊还是以char的形式存储,是存储在cpu中还是gpu中等等。

 

nn模块则是搭建网络最重要的模块。这个包下面还有很多子包,我们最后再来分析这它。
autograd,顾名思义,负责求导。
optim,顾名思义,负责优化网络参数,使得网络能够一步一步拟合所需要的函数
cuda,使用GPU加速计算的重要库
utils,没猜错的话应该是utility的简称,就是效率工具的意思,可以帮助我们更好的训练网络。它下面的Data子包包括了Dataset模块,可以让我们简单的调用数据集,Dataloader则可以让我们方便的使用数据集。
再回过头来看nn,nn这一个大模块负责搭建网络,它下面又有很多子模块。
Parameter负责管理网络中的参数,比如是否需要求导
init负责各种参数的初始化
functional则包含了很多函数,比如激活函数ReLU、sigmoid,之类的。Nomalizations则是归一化函数,LossFunctions就是均方误差、交叉熵之类的损失函数了
Containers是nn的主体,用来存放各种上面或者下面的结构的。用过pytroch的同学就知道,如果你要写一个网络模型,用类的方式来写,就得继承这个Module,相当于让你的网络类也具有容器的功能,可以往里放各种结构,比如全连接层,激活函数,卷积层之类的。sequential是更轻量化一点的容器,不过效果跟Module差不多,不细讲。
然后就是最核心的网络层了,nn里面也集成了很多常用的网络层,比如全连接层Linear,然后一二三维的卷积层、或者一二三维的池化层之类的。
nn里面也给我们直接集成了现在常用的网络模型,比如RNN、LSTM等,方便我们直接调用。

架构图

 pyTorch的模块分成了4层,分别是数据存储层、网络搭建层、优化层、应用层。
数据存储层由Storage模块和Tensor模块组成,定义了torch操作的数据的存储结构和数据结构。
网络搭建层靠nn模块撑起来。如果要自己搭建网络的话,就使用Container声明一个容器,然后往里面放我们的网络层还有各种激活函数,归一化函数之类的。也可以直接使用nn里面现成的网络模型。然后可以用Parameter和init去操作这两种网络类型中的参数。
有了网络,我们还需要想想怎么让网络中的参数逼近我们想要的函数,这时候就需要用到优化层。优化层由Autograd和optim组成,功能就是优化我们的网络使它向目标网络靠近。
最后是应用层,也就是utility包里面的Dataset模块和Dataloader模块,一个负责存取数据集,一个负责调用数据集。当然这一层我们也可以用自己手动输入数据代替,不过如果是大量的数据还是把数据制作成数据集会更加方便操作一点。
 


 

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyTorch是一个基于Python的科学计算库,广泛应用于深度学习领域。它提供了简洁灵活的API,可以帮助开发者进行高效的模型训练和部署。 PyTorch的主要特点是动态图机制。与其他静态图框架不同,PyTorch允许用户在模型训练过程中使用动态图,这意味着用户可以随时改变图的结构和参数,更加灵活地调试和优化模型。这个设计决策使得PyTorch非常适合用于快速原型设计和研究实验。 PyTorch的软件架构主要包括以下几个组件: 1. Tensor:PyTorch的核心数据结构是Tensor,它类似于多维数组,并支持GPU加速计算。Tensor可以用来存储和进行各种类型的数值计算。 2. Autograd:PyTorch的自动求导引擎Autograd使得用户可以轻松地计算梯度。在模型训练过程中,用户只需要定义前向传播的计算过程,Autograd会自动计算和跟踪梯度信息,从而实现反向传播和参数更新。 3. nn模块:PyTorch的nn模块提供了丰富的神经网络组件,如各种层(全连接、卷积、循环等)、损失函数、优化器等。用户可以使用这些组件来构建自己的神经网络模型。 4. 数据加载和预处理:PyTorch提供了一系列工具和接口来加载和预处理数据。例如,用户可以使用torchvision库加载和处理图像数据。 5. 分布式训练:PyTorch支持分布式训练,可以在多台机器和多个GPU上进行并行计算,加速模型训练的过程。 总之,PyTorch的软件架构具有灵活性、易用性和高效性的特点,使得开发者可以更加方便地构建和训练深度学习模型。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值