最后更新: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)
本文由 在线网速测试 整理编辑,转载请注明出处。