PyTorch结构、架构分析 |
您所在的位置:网站首页 › 框架是什么样的结构图片 › PyTorch结构、架构分析 |
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.functionaltorch.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每个子包负责什么功能有一个大体的认识了,接下来就可以来分析它的架构图了,也就是依赖关系。 这个图也是我自己总结的,如果有错漏还希望大家多多指教。 后面的同学应该看不清楚,那就只能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 |