多层感知机激活函数


import torch
from d2l import torch as d2l

'''
#Relu函数实现
x = torch.arange(-8.0,8.0,0.1,requires_grad=True)
y = torch.relu(x)
d2l.plot(x.detach(),y.detach(),'x','relu(x)',figsize=(5,2.5))
d2l.plt.show()
#绘制ReLU函数的导数
y.backward(torch.ones_like(x),retain_graph=True)
d2l.plot(x.detach(),x.grad,'x','grad of relu',figsize=(5,2.5))
d2l.plt.show()
'''

'''
#sigmoid函数
x = torch.arange(-8.0,8.0,0.1,requires_grad=True)
y = torch.sigmoid(x)
d2l.plot(x.detach(),y.detach(),'x','sigmoid(x)',figsize=(5,2.5))
d2l.plt.show()
'''

''''''
#tanh(双曲正切)函数
x = torch.arange(-8.0,8.0,0.1,requires_grad=True)
y = torch.tanh(x)
d2l.plot(x.detach(),y.detach(),'x','tanh(x)',figsize=(5,2.5))
d2l.plt.show()
#清除以前的梯度
#x.grad.data.zero_()
y.backward(torch.ones_like(x),retain_graph=True)
d2l.plot(x.detach(),x.grad,'x','grad of tanh',figsize=(5,2.5))
d2l.plt.show()

多层感知机输出层是否需要激活函数取决于具体的任务需求。 在一些情况下,输出层可能不需要激活函数。例如在回归任务中,目标是预测连续值,输出层通常不使用激活函数,直接输出线性组合的结果。因为线性输出可以直接对应到连续的数值范围,能够更好地拟合连续的目标值。若激活函数为 \(f(x) = x\),即输出就是输入,经过推导可知最终输出仍是一个线性模型 [^3]。 而在另一些情况下,输出层需要激活函数。比如在分类任务中,若为二分类问题,输出层常使用Sigmoid激活函数,它可以将输出值映射到\((0, 1)\)区间,方便表示样本属于某一类别的概率;对于多分类问题,输出层一般使用Softmax激活函数,它能将输出转换为概率分布,使得所有类别的输出概率之和为1。 ```python import torch import torch.nn as nn # 回归任务,输出层不使用激活函数 class RegressionMLP(nn.Module): def __init__(self, input_size, hidden_size, output_size): super(RegressionMLP, self).__init__() self.fc1 = nn.Linear(input_size, hidden_size) self.relu = nn.ReLU() self.fc2 = nn.Linear(hidden_size, output_size) def forward(self, x): x = self.relu(self.fc1(x)) x = self.fc2(x) return x # 二分类任务,输出层使用Sigmoid激活函数 class BinaryClassificationMLP(nn.Module): def __init__(self, input_size, hidden_size): super(BinaryClassificationMLP, self).__init__() self.fc1 = nn.Linear(input_size, hidden_size) self.relu = nn.ReLU() self.fc2 = nn.Linear(hidden_size, 1) self.sigmoid = nn.Sigmoid() def forward(self, x): x = self.relu(self.fc1(x)) x = self.sigmoid(self.fc2(x)) return x # 多分类任务,输出层使用Softmax激活函数 class MultiClassificationMLP(nn.Module): def __init__(self, input_size, hidden_size, num_classes): super(MultiClassificationMLP, self).__init__() self.fc1 = nn.Linear(input_size, hidden_size) self.relu = nn.ReLU() self.fc2 = nn.Linear(hidden_size, num_classes) self.softmax = nn.Softmax(dim=1) def forward(self, x): x = self.relu(self.fc1(x)) x = self.fc2(x) x = self.softmax(x) return x ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值