• 小白学习之pytorch框架(3)-模型训练三要素+torch.nn.Linear()


     模型训练的三要素:数据处理、损失函数、优化算法 

       数据处理(模块torch.utils.data)

    从线性回归的的简洁实现-初始化模型参数(模块torch.nn.init)开始

    from torch.nn import init   # pytorch的init模块提供了多中参数初始化方法
    
    init.normal_(net[0].weight, mean=0, std=0.01)    #初始化net[0].weight的期望为0,标准差为0.01的正态分布tensor
    init.constant_(net[0].bias, val=0)  #初始化net[0].bias,值为0的常数tensor
    # 此外还封装了好多
    # init.ones_(w) 初始化一个形状如w的全1分布的tensor,如w是3行5列,则初始化为3行5列的全1tensor
    # init.zeros_(w) 初始化一个形状如w的全0分布的tensor
    # init.eye_(w) 初始化一个形状如w的对角线为1,其余为0的tensor
    # init.sparse_(w,sparsity=0.1) 初始化一个形状如w稀疏性为0.1的稀疏矩阵

     损失函数(模块torch.nn含有大量的神经网络层)

     pytorch的nn模块中定义了各种损失函数,这些损失函数可以看成一种特殊的网络层 

    loss = nn.MSELoss()  # 均方误差损失函数
    #
    torch.nn.MSELoss(reduce=True, size_average=True)
    # reduce=True,返回标量形式的loss,reduce=False,返回向量形式的loss
    # size_average=True,返回loss.mean(),size_average=False,返回loss.sum()
    # 默认两者皆为True

     优化算法(模块torch.optim)

        torch.optim模块定义了很多的优化算法,如SGD、Adam、RMSProp等

    import torch.optim as optim
    optimizer = optim.SGD(net.parameters(), lr=0.03)
    print(optimizer)

    # 对不同的子网络设置不同的学习率
    optimizer = optim.SGD([
              # 如果对某个参数不指定学习率,就使用最外层的默认学习率
              {'params':net.subnet1.parameters()}, # lr=0.03
              {'params':net.subnet2.parameters(),'lr':0.01}
    ],lr=0.03)

      设置动态学习率,不是固定一个常数

      方法1、修改optimizer.param_groups中的学习率

    #调整学习率
    for param_group in optimizer.param_groups:
        param_group['lr'] *= 0.1   # 学习率是之前的0.1倍

      方法2、新建优化器,即构建新的optimizer。使用动量的优化器(如Adam),可能会丢失动量等状态信息,可能会造成损失函数的收敛出现震荡等情况。

    optimizer = optim.SGD([
                    {'param':net.subnet1.parameters()},
                    {'param':net.subnet2.parameters(),'lr':old_lr*0.1}],lr=0.03)
    

      上述代码若不理解net.subnet1.parameters(),可参考博客 https://www.cnblogs.com/hellcat/p/8496727.html   万分感谢博主     

    view(-1,1)   # -1是不确定几行的意思,在这就是我不确定要取几行,但是肯定是一列,故view(-1,1);

      torch.view()和numpy.reshape()效果一样,view操作的是tensor,且view后的tensor和原tensor共享内存,修改其中一个,另一个也会改变,reshape()操作的是nparray。

      线性回归  

      torch.nn.Linear(in_features,out_features,bias)

      参数解析:

        in_features:输入特征的数量(或称为特征数特征向量X的维度),即在房价预测中仅和房龄与面积有关,则in_features=2

        out_features:输出特征的数量(同in_features)

        bias:偏置,默认为True

      例子请参考 https://www.cnblogs.com/Archer-Fang/p/10645473.html  感谢博主  

  • 相关阅读:
    Mac上的常用软件
    Mac上在iterm2中使用ls时,出现Operation not permitted
    Typora常用操作
    Mac上的qemusystemaarch64占用太多内存
    软件质量管理总结
    postgres使用记录
    Linux 包含中文字符的文件名无法使用shell 选中或复制
    常见硬件知识
    iterm2 常用操作
    C# 通过 HTTPModule 防范 DOS
  • 原文地址:https://www.cnblogs.com/JadenFK3326/p/12097030.html
Copyright © 2020-2023  润新知