multilayer perceptron (MLP):多层感知机(多层神经网络)
(hidden layer)隐藏层:
介于输入层和输出层之间的网络层
输入层不涉及计算,如果一个神将网络由三层组成,则多层感知机层数为2
多层感知机中隐藏层和输出层都是全连接
隐藏层的输出(也叫隐藏层变量或隐藏变量)
隐藏层单元个数≠隐藏层变量个数
将隐藏层的输出作为输出层的输入,联立后得到的式子依然从形式上等价于一个单层神经网络
原因是因为全连接层只是对数据做仿射变换(affine transformation) ,多个仿射变换的叠加仍然是一个仿射变换,所以需要引入非线性变换
例如使用对隐藏变量按元素运算的份线性函数进行变换,再将结果作为下一个全连接层的输入,这个非线性函数即激活函数
激活函数:
1. ReLU(rectified linear unit)
给定元素x,该函数定义为:ReLu(x)=max(x,0)
2. sigmoid 变换数据到0-1之间
3. tanh 变换数据到-1,1之间
多层感知机的层数以及隐藏层中隐藏单元个数都是超参数,可以人为设定
def cross_entropy(y_hat, y): # 得到y中每行对应索引位置y_hat每行的索引概率,比如y[0]=8,则索引到y_hat[0]=8处的类别概率值0.4
return -torch.log(y_hat.gather(1, y.view(-1, 1))) # 交叉熵只关心对正确类别的预测概率,通过使用gather函数,可以得到2个样本的标签的预测概率。
#这里y_hat.gather(1, y.view(-1, 1))得到的应该是一个具有多个元素的tensor张量,然后torch.log进行了对数计算
cross_entropy()就是一个交叉熵损失函数,相当于loss函数调用 返回的是标签y对应类别的预测概率的自然对数张量
调用时一般是loss(y_hat,y).sum() sum就是为了将这些概率加和,然后在进行反向传播计算(具体这里的逻辑还是不清楚,以后慢慢会懂得)文章来源:https://www.toymoban.com/news/detail-821744.html
在torch.nn.CrossEntropyLoss()函数调用时,他已经计算了批次损失的平均值,所以不需要进行sum()文章来源地址https://www.toymoban.com/news/detail-821744.html
到了这里,关于李沐深度学习-激活函数/多层感知机文档的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!