您的位置:首页 > 娱乐 > 八卦 > 给个免费的网站好人有好报_销售易crm收费标准_自己怎么免费做百度推广_中国知名网站排行榜

给个免费的网站好人有好报_销售易crm收费标准_自己怎么免费做百度推广_中国知名网站排行榜

2025/2/24 6:18:47 来源:https://blog.csdn.net/IT_ORACLE/article/details/145542555  浏览:    关键词:给个免费的网站好人有好报_销售易crm收费标准_自己怎么免费做百度推广_中国知名网站排行榜
给个免费的网站好人有好报_销售易crm收费标准_自己怎么免费做百度推广_中国知名网站排行榜

在神经网络中,输出层(Output Layer) 的激活函数(Activation Function)直接决定了模型的输出形式,并影响损失函数的选择及训练效果。不同的任务类型(如分类或回归)需要使用不同的激活函数,以确保输出结果符合问题要求。

本文将详细介绍 二元分类(Binary Classification)、多分类(Multi-class Classification)和回归(Regression)任务中常用的输出层激活函数,并提供相应的代码示例。


1. 输出层激活函数概述

根据任务类型,输出层常用的激活函数如下:

任务类型常见激活函数输出值范围
二元分类sigmoid(0,1)
多分类softmax(0,1) 且所有类别概率之和为 1
回归无激活函数(线性输出)(-∞, +∞)

接下来,我们分别介绍这些激活函数的作用、数学公式、特点及代码实现。


2. 二元分类:Sigmoid 函数

2.1 介绍

Sigmoid 函数常用于二元分类问题,其数学公式如下:

\sigma(x) = \frac{1}{1 + e^{-x}}

  • 该函数将输出值映射到 (0,1) 之间,适用于概率预测。
  • \sigma(x) > 0.5,通常预测为正类(1),否则为负类(0)

2.2 代码示例

PyTorch 实现二元分类
import torch
import torch.nn as nn
import torch.optim as optim# 定义二元分类模型
class BinaryClassifier(nn.Module):  # 二元分类模型def __init__(self):  # 初始化模型super(BinaryClassifier, self).__init__()  # 继承父类self.fc = nn.Linear(2, 1)  # 2个输入特征,1个输出(概率)def forward(self, x):  # 前向传播return torch.sigmoid(self.fc(x))  # Sigmoid 激活函数# 定义损失函数和优化器
model = BinaryClassifier()  # 创建模型
criterion = nn.BCELoss()  # 二元交叉熵损失
optimizer = optim.SGD(model.parameters(), lr=0.1)  # 优化器# 生成示例数据
inputs = torch.tensor([[1.0, 2.0], [2.0, 3.0], [3.0, 1.0]], dtype=torch.float32)  # 输入特征
labels = torch.tensor([[1.0], [0.0], [1.0]], dtype=torch.float32)  # 标签# 训练模型
for epoch in range(100):  # 训练100个周期optimizer.zero_grad()  # 清空梯度outputs = model(inputs)  # 前向传播loss = criterion(outputs, labels)  # 计算损失loss.backward()  # 反向传播optimizer.step()  # 更新参数if epoch % 10 == 0:  # 每10个周期输出一次损失print(f'Epoch [{epoch}/100], Loss: {loss.item():.4f}')  # 输出损失

运行结果

Epoch [0/100], Loss: 1.1413
Epoch [10/100], Loss: 0.5956
Epoch [20/100], Loss: 0.5529
Epoch [30/100], Loss: 0.5320
Epoch [40/100], Loss: 0.5160
Epoch [50/100], Loss: 0.5033
Epoch [60/100], Loss: 0.4927
Epoch [70/100], Loss: 0.4835
Epoch [80/100], Loss: 0.4753
Epoch [90/100], Loss: 0.4679

 

2.3 适用场景

  • 垃圾邮件检测(垃圾邮件 vs. 非垃圾邮件)
  • 疾病预测(有病 vs. 无病)
  • 金融欺诈检测(欺诈 vs. 正常交易)

3. 多分类:Softmax 函数

3.1 介绍

Softmax 函数用于多分类任务,其数学公式如下:

\text{Softmax}(x_i) = \frac{e^{x_i}}{\sum_{j=1}^{n} e^{x_j}}

  • 特点
    • 归一化所有输出值,使其总和等于 1(形成概率分布)。
    • 适用于独占类别(Mutually Exclusive Classes)的分类任务。

3.2 代码示例

PyTorch 实现多分类
import torch
import torch.nn as nn
import torch.optim as optimclass MultiClassClassifier(nn.Module):  # 多分类模型def __init__(self, input_dim, num_classes):  # 输入维度和类别数super(MultiClassClassifier, self).__init__()  # 继承父类初始化方法self.fc = nn.Linear(input_dim, num_classes)  # 线性层self.fc.weight.data.normal_(0, 0.01)  # 初始化权重def forward(self, x):  # 前向传播return torch.softmax(self.fc(x), dim=1)  # Softmax 归一化# 定义模型、损失函数和优化器
model = MultiClassClassifier(input_dim=3, num_classes=4)  # 创建模型
criterion = nn.CrossEntropyLoss()  # 交叉熵损失函数
optimizer = optim.Adam(model.parameters(), lr=0.01)  # Adam 优化器# 生成示例数据(假设有3个特征,4个类别)
inputs = torch.tensor([[1.0, 2.0, 3.0], [2.0, 1.0, 3.0]], dtype=torch.float32)  # 输入特征
labels = torch.tensor([1, 3])  # 类别索引(0-3)# 训练模型
for epoch in range(100):  # 训练100个周期optimizer.zero_grad()  # 清空梯度outputs = model(inputs)  # 前向传播loss = criterion(outputs, labels)  # 计算损失loss.backward()  # 反向传播optimizer.step()  # 更新参数if epoch % 10 == 0:  # 每10个周期打印一次损失print(f'Epoch [{epoch}/100], Loss: {loss.item():.4f}')  # 打印损失

运行结果

Epoch [0/100], Loss: 1.3481
Epoch [10/100], Loss: 1.2146
Epoch [20/100], Loss: 1.1262
Epoch [30/100], Loss: 1.0629
Epoch [40/100], Loss: 1.0134
Epoch [50/100], Loss: 0.9731
Epoch [60/100], Loss: 0.9401
Epoch [70/100], Loss: 0.9131
Epoch [80/100], Loss: 0.8909
Epoch [90/100], Loss: 0.8727

3.3 适用场景

  • 手写数字识别(MNIST,类别 0-9)
  • 图像分类(狗、猫、鸟等)
  • 情感分析(积极、中性、消极)

4. 回归:无激活函数(线性输出)

4.1 介绍

回归任务中,目标是预测连续数值,因此输出层通常不使用激活函数,保持线性输出:

y = w \cdot x + b

  • 预测值范围为(-∞, +∞),不受激活函数限制。

4.2 代码示例

PyTorch 实现回归
import torch
import torch.nn as nn
import torch.optim as optimclass RegressionModel(nn.Module):  # 线性回归模型def __init__(self):  # 初始化模型super(RegressionModel, self).__init__()  # 继承父类self.fc = nn.Linear(1, 1)  # 单输入单输出def forward(self, x):  # 前向传播return self.fc(x)  # 线性输出,无激活函数# 定义模型、损失函数和优化器
model = RegressionModel()  # 创建模型
criterion = nn.MSELoss()  # 均方误差损失
optimizer = optim.SGD(model.parameters(), lr=0.01)  # 随机梯度下降优化器# 生成示例数据
inputs = torch.tensor([[1.0], [2.0], [3.0]], dtype=torch.float32)  # 输入 x
targets = torch.tensor([[2.0], [4.0], [6.0]], dtype=torch.float32)  # 目标 y = 2x# 训练模型
for epoch in range(100):  # 训练100个周期optimizer.zero_grad()  # 梯度清零outputs = model(inputs)  # 前向传播loss = criterion(outputs, targets)  # 计算损失loss.backward()  # 反向传播optimizer.step()  # 更新参数if epoch % 10 == 0:  # 每10个周期打印一次损失print(f'Epoch [{epoch}/100], Loss: {loss.item():.4f}')  # 输出损失

运行结果 

Epoch [0/100], Loss: 18.9413
Epoch [10/100], Loss: 1.8053
Epoch [20/100], Loss: 0.1735
Epoch [30/100], Loss: 0.0181
Epoch [40/100], Loss: 0.0032
Epoch [50/100], Loss: 0.0017
Epoch [60/100], Loss: 0.0015
Epoch [70/100], Loss: 0.0014
Epoch [80/100], Loss: 0.0013
Epoch [90/100], Loss: 0.0013

4.3 适用场景

  • 房价预测
  • 股票价格预测
  • 销量预测

5. 结论

任务类型激活函数适用损失函数
二元分类Sigmoid二元交叉熵(BCELoss)
多分类Softmax交叉熵损失(CrossEntropyLoss)
回归无激活函数均方误差(MSELoss)

不同任务类型需要选择合适的激活函数,以确保神经网络能够正确学习和预测目标值。希望本文能帮助你更好地理解输出层激活函数的使用! 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com