PyTorch(贰):在pytorch中定义模型的方法(超全)

一、前言

        如果我们单纯使用python+numpy的方式来定义一个神经网络模型的话,当仅仅是实现一个线性回归等小模型时,并没有什么不可,但是当要实现的模型比较复杂的时候,比如需要定义很多层不同结构的模型时,就会显得很复杂。在pytorch中提供的大量预定义的层,我们只需要关注使用哪些层来进行构造网络。定义模型的方法大概可以分为两大类。

二、继承nn.Module

        实际使用中,最常用的做法是继承nn.Module,撰写自己的网络/层。使用这种方法一般需要包括一些层以及返回输出的前向传播方法。下面以实现线性回归来进行举例说明。

class LinearNet(torch.nn.Module):
    def __init__(self,n_feature):
        super(LinearNet,self).__init__()
        self.linear=torch.nn.Linear(n_feature,1) #使用torch.nn中的线性回归函数
    #定义前向传播
    def forward(self,x):
        y=self.linear(x)
        return y
net =LinearNet(num_inputs)
print(net)   #使用print可以打印出网络的结构

输出:

LinearNet(
  (linear): Linear(in_features=2, out_features=1, bias=True)
)

三、使用nn.Sequential()

        使用nn.Sequential()可以很方便的搭建一个神经网络,Sequential是一个有序容器,网络层将依次将按照存入的顺序依次被添加到计算图里面。使用nn.Sequential有三种方式,效果都是一致的,下面将通过代码进行介绍。

#写法一:
net=torch.nn.Sequential(
    torch.nn.Linear(num_inputs,1)
    #torch.nn.xxx
    #此处可以传入其它层
    )
#写法二:
net=torch.nn.Sequential()
net.add_module('linear',torch.nn.Linear(num_inputs,1))
#net.add_module.....


#写法三
from collections import OrderedDict
net = torch.nn.Sequential(OrderedDict([
    ('linear',torch.nn.Linear(num_inputs,1)),
    #xxxx
    ]))
print(net)

输出:

Sequential(
  (linear): Linear(in_features=2, out_features=1, bias=True)
)

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值