PyTorch结构、架构分析

您所在的位置:网站首页 框架是什么样的结构图片 PyTorch结构、架构分析

PyTorch结构、架构分析

2024-07-01 00:32| 来源: 网络整理| 查看: 265

pyTorch架构

参考资料:主页 - PyTorch中文文档 (pytorch-cn.readthedocs.io)

文章目录 pyTorch架构torch是什么pytorch中的torchtorch.Tensortorch.Storagetorch.nn包含多种子类:容器(Containers):网络层:函数包:torch.nn.functional搭建好的网络: torch.autograd:torch.optim:torch.cuda:torch.utils:torch.utils.data.Dataset:torch.utils.data.DataLoder: torchvision PyTorch结构、架构介绍引言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。

pytorch结构图

在这里插入图片描述 了解了pytorch这个名字的由来呢,我们就可以看看来看看它的结构图了。对了,这里说的是结构图而不是架构图,后面还会再分享一个架构图。在我的认知里,结构主要强调的是模块与模块之间的包含关系,而架构更多的强调模块之间的依赖关系。这两个图都是我自己看pyTorch官方手册总结出来的,如果有同学觉得不对我们可以课后再讨论。 那我们接下来就来看着这个图了解一下整个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每个子包负责什么功能有一个大体的认识了,接下来就可以来分析它的架构图了,也就是依赖关系。 这个图也是我自己总结的,如果有错漏还希望大家多多指教。 后面的同学应该看不清楚,那就只能en听我讲了。 我把pyTorch的这么多模块,分成了4层,分别是数据存储层、网络搭建层、优化层、应用层。 数据存储层由Storage模块和Tensor模块组成,定义了torch操作的数据的存储结构和数据结构。 接下来是网络搭建层,全靠刚刚讲的nn模块撑起来。如果要自己搭建网络的话,就使用Container声明一个容器,然后往里面放我们的网络层还有各种激活函数,归一化函数之类的。也可以直接使用nn里面现成的网络模型。然后可以用Parameter和init去操作这两种网络类型中的参数。 有了网络,我们还需要想想怎么让网络中的参数逼近我们想要的函数,这时候就需要用到优化层。优化层由Autograd和optim组成,功能就是优化我们的网络使它向目标网络靠近。 最后是应用层,也就是utility包里面的Dataset模块和Dataloader模块,一个负责存取数据集,一个负责调用数据集。当然这一层我们也可以用自己手动输入数据代替,不过如果是大量的数据还是把数据制作成数据集会更加方便操作一点。

架构六要素分析

至此呢,我们对pytorch的架构已经分析完了,接下来要使用软件架构六要素对pytorch进行分析。 这六个要素分别是:可用性、可修改性、性能、安全性、可测试性和易用性。 可用性,杠杠的,用过的人都说好。按照定义可用性与发生故障及其后果有关,如果用pytorch搭网络,搭错了,基本也不会产生什么大问题,而且它报的错误也比较合理,会告诉你是Tensor的维度不对,还是Tensor的类型不对,也很少崩溃,可用性还是不错的。而且手册也写得很好,我这次分享的绝大部分参考资料都是pytorch手册。 可修改性我不会分析,因为还没有厉害到需要修改pytorch源码的程度,所以跳过,不分析。 性能,pytorch作为近几年学术界最主流的神经网络框架,它的性能不差,至少不比Tensorflow差,已经是市场上最快的神经网络框架之一了。不过硬要和C++上搭的神经网络比,那还是比不了。 安全性,不知道怎么分析,还有人攻击pytorch的吗…不了解,跳过。 可测试性,上面的框架每一个部分负责的功能都比较清晰,有需要的话可以一个一个模块进行测试,可测试性好。 易用性,看最近学术界越来越多人用pytorch就知道它的易用性是很好的,可以说有神经网络理论基础的人都可以很快地上手pytorch,据说它的函数名、参数设置比tensorflow好很多。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3