李沐深度学习-激活函数/多层感知机文档

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就是为了将这些概率加和,然后在进行反向传播计算(具体这里的逻辑还是不清楚,以后慢慢会懂得)

在torch.nn.CrossEntropyLoss()函数调用时,他已经计算了批次损失的平均值,所以不需要进行sum()

你可能感兴趣的:(李沐深度学习编码实现,深度学习,人工智能)