(二)模型构建优化损失函数API的使用

1、模型        nn.Module

nn.Module是torch.nn提供的一个类,是pytorch中我们自定义网络的一个基类,这个类中定义了 很多有用的方法。

        注意:i.  __init__需要调用super方法,继承父类的属性和方法。

                   ii. farward方法必须实现,用来定义我们网络的向前计算过程。

import torch.nn as nn
import torch.nn.functional as F

class Model(nn.Module):
    def __init__(self):
        super(Model, self).__init__()
        self.conv1 = nn.Conv2d(1, 20, 5)# submodule: Conv2d
        self.conv2 = nn.Conv2d(20, 20, 5)

    def forward(self, x):
       x = F.relu(self.conv1(x))
       return F.relu(self.conv2(x))

nn.Module定义了__call__方法,实现的就是调用forward方法,即Model实例,能够直接被传入参数调用,实际上调用的是forward方法并传入参数。

# 实例化模型
moudle = Model()
# 传入数据,计算结果
predict = moudle(x)

扩展:

        moudle.eval()表示设置模式为评估模式,即预测模式

        model.train(mode=True) 表示设置模式为训练模式

        在线性回归中,上述并无区别。但是在其他的一些模型中,训练的参数和预测的参数会不相同,到时候就需要具体的

2、全连接层        nn.Linear

class torch.nn.Linear(in_features, out_features, bias=True)

它是全连接层,对输入数据做线性变换:\(y = Ax + b\)

参数:

  • in_features - 每个输入样本的大小
  • out_features - 每个输出样本的大小
  • bias - 若设置为False,这层不会学习偏置。默认值:True

形状:

  • 输入: \((N, in\_features)\)
  • 输出: \((N, out\_features)\)

变量:

  • weight -形状为(out_features x in_features)的模块中可学习的权值
  • bias -形状为(out_features)的模块中可学习的偏置

例子:

m = nn.Linear(20, 30)
input = autograd.Variable(torch.randn(128, 20))
output = m(input)
print(output.size())

3、优化器类        torch.optim

优化器(optimizer),可以理解为torch为我们封装的用来更新参数的方法,是一个实现了各种优化算法的库。大部分常用的方法得到支持,并且接口具备足够的通用性,使得未来能够集成更加复杂的方法。比如常见的随机梯度下降SGD。

如何使用optimizer

为了使用torch.optim,你需要构建一个optimizer对象。这个对象能够保持当前参数状态并基于计算得到的梯度进行参数更新。

1、torch.optim.SGD(参数,学习率)

2、torch.optim.Adam(参数,学习率)

注意 :参数可以使用model.parameters()来获取,获取模型中所有requires_grad=True的参数。

构建

为了构建一个Optimizer,你需要给它一个包含了需要优化的参数(必须都是Variable对象)的iterable。然后,你可以设置optimizer的参 数选项,比如学习率,权重衰减,等等。

例子:

optimizer = optim.SGD(model.parameters(), lr = 0.01, momentum=0.9)
optimizer = optim.Adam([var1, var2], lr = 0.0001)

优化类使用的方法:

        1、实例化

        2、所有参数的梯度,将其值设置为0

        3、反向传播计算梯度

        4、更新参数值

示例:

optimizer=optim.SGD(model.parameters(),lr=1e-3) #1、实例化
optimizer.zero_grad() #2、梯度置0
loss.backward() #3、计算梯度
optimizer.step() #4、更新参数值

4、损失函数

1、均方误差:nn.MSELoss(), 常用语分类问题 

2、交叉熵损失:nn.CrossEntropyLoss(),常用语逻辑回归

使用方法:

criterion = LossCriterion() #构造函数有自己的参数,损失函数实例化
loss = criterion(y_true, y_predict) #调用标准时也有参数

其中LossCriterion()可替换成各种损失函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值