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

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()

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值