人工智能编程:如何快速搭建一个神经网络并获取各网络层的参数?

      最后更新:2020-03-18 13:17:00 手机定位技术交流文章

      限时优惠的人工智能栏

      下方的栏目中,欢迎限时优惠订阅


      正文


      。PyTorch实现了神经网络中的绝大部分层,这些层都是从神经网络模块继承来的,可学习参数被封装起来,实现了前向功能。它们中的许多都是针对CuDNN的图形处理器操作而优化的,它们的速度和性能都非常出色。

      如NN。线性(输入特征、输出特征、偏差),应注意这三个参数的功能

      如nn。线性有两个可学习的参数权重和偏差输入和输出形状,例如nn。线性输入形状是(N,输入特征),输出是(N,输出特征),N是批处理大小

      在PyTorch中编写了一个神经网络。所有的层结构和损失函数都是从torch.nn派生出来的。所有的模型构建都是从这个基类nn继承而来的。模块,因此以下模板可用

      类网络名称(nn。穆德尔):

      def __init__(自我,其他事项):

      super(网络名称,自我)。_ _ init _ _()

      self . conv 1 = nn . conv 2d(in _ channel,out _ channels,kernel _ size)

      #其他网络层其他网络层

      def转发(self,X):

      x = self。因此,con v1(x)

      return x

      建立了一个计算图表,该结构可以多次重复使用。每个调用都相当于一个前向传播,具有计算图表中定义的相同参数,这得益于PyTorch的自动推导功能,因此我们不需要自己写回传播。所有的网络层都是通过神经网络获得的,比如线性层,当我们以后使用它的时候,我们可以详细介绍每个网络的对应结构以及如何调用它。在

      定义了模型之后,我们需要nn作为包来定义损失函数神经网络中定义了常见的损失函数,如均方误差、多分类交叉熵、两分类交叉熵等。调用这些定义的损失函数也非常简单:

      标准= NN。交叉损失(crosstrolosis)

      损失=标准(输出,目标)

      这样,我们的输出和真实目标之间的损失函数可以得到。

      普通神经网络层:

      卷积层conv = nn。conv2d (1,1,(3,3),1,bias = false)

      池层池= nn。AvgPool2d(2,2)

      线性:全连接层线性= nn。线性(3,4)

      BatChorm:批处理规范化层bn = nn .批处理规范1d (4)

      压差:压差层压差= nn。丢弃(0.5)#0.5丢弃

      激活函数的概率rel = nn.rel(真)

      #在嵌入层中,有4个字。每个单词使用5维向量来表示

      嵌入= nn。嵌入(4,5)

      两种方式构建网络

      当我们构建神经网络时,我们可以将多个神经网络层组合在一起,并且我们可以使用顺序和模块化两种方式

      让我们先看看顺序。它可以被视为一个模块

      #连续三种书写风格

      书写风格1:添加名称

      net1 = nn . Sequential()

      net1 . add _ module(' conv ',nn.conv2d (3,3)

      net1.add _ module('批处理规范',nn .批处理规范2d (3))

      net1.add _ module('激活_层')因此,我们可以提取神经网络的每一层

      网络1 . conv

      网络1 .批处理规范

      正向传播输出=网络1(输入)

      写2:

      网络2 = nn . sequential(

      nn . conv 2d (3,3,3),

      nn .批处理规范2d(3),

      nn.rel()我们可以按索引顺序检索神经网络的每一层

      网络2

      。我们可以检索每个层

      net3.conv1

      正向传播

      模式1: output = net3(输入)

      模式2:output = net 3 . reliu 1(net 1 . batch norm(net 1 . conv(输入)))

      ModuleList。请注意,Modulelist在模块中使用时(在nn的__init__()方法中使用时)可以自动识别为子模块。模块)

      级Net4(nn。模块):

      def __init__(自我):

      super(网络4,自我)。_ _ init _ _()

      self . module _ list = nn . module list(

      这意味着建立一个完整的连接层,w和b是完整连接层的权重参数,其中w的维数是(输出,输入)

      nn。参数将具有梯度函数

      来获得参数

      净参数()意味着获得所有参数

      净列表。此时,该列表应为

      ,以遍历所有模型参数。其中name表示模型的参数,注意这个名称中没有net.1,因为nn。ReLU是模型的第二层,但是没有参数,所以在网0之后没有网1。但是,网2

      命名-children意味着网络获取网的子节点

      获取所有节点。从子节点到子节点

      自定义扩展层

      class flap(nn。模块):

      def _ _ init _ _(自我):

      super(襟翼,自我)。_ _ init _ _()

      def forward(self,input):

      return input . view(input . size(0),-1)

      class TestNet(nn。模块):

      def __init__(自我):

      super(TestNet,自我)。__init__()

      self.net = nn。顺序(nn。Conv2d(1,16,步幅=1,填充=1),

      nn。MaxPool2d(2,2),

      fraten(),

      nn。线性(1*14*14,10))

      向前延迟(self,x):

      返回self.net(x)

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/1783.html

          热门文章

          文章分类