深度学习框架Pytorch——学习笔记(七)常用损失函数和神经网络优化方法,激活函数简述

    xiaoxiao2022-07-05  125

    深度学习框架Pytorch——学习笔记(七)常用损失函数和神经网络优化方法,激活函数简述

    优化方法参考地址 https://www.leiphone.com/news/201706/e0PuNeEzaXWsMPZX.html

    网络的可学习参数 net.parameters()

    for parameters in net.parameters(): print(parameters) 使用 net.named_parameters() 可同时返回可学习参数和名称

    loss损失函数在nn中常用的都包含,是类的方式,先定义后使用 优化器在torch.optim中 , 传入 net.parameters() 网络的参数

    常用的损失函数

    (x,y)L1loss
    nn.L1Loss() x与y的差的绝对值

    (x,y)均方损失
    nn.MSELoss() x与y的差的平方和

    用于多分类的负对数似然损失
    nn.NLLLoss()

    用于多分类的交叉熵损失
    nn.CrassEntropyLoss() logsoftmax与MLLloss的结合

    (x,y)二进制交叉熵
    nn.BCELoss() 用前需要在前面加上sigmoid函数

    三种优化算法

    优化器的作用就是用来更新梯度的。 SGD随机梯度下降 RMSprop快速梯度下降 Adam自动

    SGD随机梯度下降算法,带有动量的可选参数

    optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9)

    RMSprop算法,可以减小某些维度梯度更新波动较大的情况,使其梯度下降的速度变得更快

    optimizer = torch.optim.RMSprop(model.parameters(), lr=0.01, alpha=0.99)

    Adam 自动更新梯度,一般使用默认值即可

    optimizer = torch.optim.Adam(model.parameters())

    常见激活函数

    神经网络无非是每层的矩阵相乘,其关系是线性的。无论怎么改变,其得到的信息没有太大的差距。所以需要激活函数引入非线性因素,使得神经网络可以任意逼近任何非线性函数,增加了模型泛化的特性。
    sigmoid函数 (放弃)

    输出在(0,1),把输入变换为0到1之间的输出。 需要进行指数运算,比较慢,且不利于权重优化。 目前基本上只有在做二元分类(0,1)时的输出层才会使用。

    tanh函数 (放弃)

    输出区间是在(-1,1)之间,以0为中心。 随着Relu的出现所有的隐藏层基本上都使用relu来作为激活函数了

    ReLU (最常用)

    a=max(0, x) 导数大于0时1,小于0时0。 当输入是负数的时候,ReLU是完全不被激活的. 但是实际的运用中,该缺陷的影响不是很大。

    Leaky ReLU函数 (不一定好用)

    a=max(zx, x) z=0.01 理论上来讲,Leaky ReLU有ReLU的所有优点,但是在实际操作当中,并没有完全证明Leaky ReLU总是好于ReLU。

    最新回复(0)