0

0

使用 PyTorch 实现多 Softmax 输出的神经网络

心靈之曲

心靈之曲

发布时间:2025-10-07 14:53:55

|

793人浏览过

|

来源于php中文网

原创

使用 pytorch 实现多 softmax 输出的神经网络

本文介绍了如何使用 PyTorch 构建一个具有多个独立二元分类输出的神经网络。重点讲解了如何选择合适的损失函数 BCEWithLogitsLoss,以及如何正确配置神经网络的输出层,以解决需要预测多个 0 到 1 值的问题,并提供代码示例和注意事项,帮助读者理解和应用该方法。

在构建神经网络时,如果需要网络输出多个独立的 0 到 1 之间的值,而不是进行多类别分类,那么传统的 nn.Softmax() 和 CrossEntropyLoss 就不再适用。这种情况通常出现在需要预测多个标签,每个标签都是二元(0 或 1)的情况下。本文将介绍如何使用 PyTorch 中的 BCEWithLogitsLoss 损失函数来解决这个问题。

理解问题

传统的 Softmax 函数通常用于多类别分类,它会将网络的输出转化为一个概率分布,所有输出之和为 1。然而,当需要预测多个独立的二元值时,每个输出应该被视为一个独立的二元分类问题。

解决方案:BCEWithLogitsLoss

BCEWithLogitsLoss 是 PyTorch 中用于二元交叉熵损失的函数,它结合了 Sigmoid 函数和 BCELoss 函数。Sigmoid 函数将网络的输出值压缩到 0 到 1 之间,表示概率。BCELoss 函数则计算二元交叉熵损失。

以下是使用 BCEWithLogitsLoss 的步骤:

BJXSHOP网上开店专家
BJXSHOP网上开店专家

BJXShop网上购物系统是一个高效、稳定、安全的电子商店销售平台,经过近三年市场的考验,在中国网购系统中属领先水平;完善的订单管理、销售统计系统;网站模版可DIY、亦可导入导出;会员、商品种类和价格均实现无限等级;管理员权限可细分;整合了多种在线支付接口;强有力搜索引擎支持... 程序更新:此版本是伴江行官方商业版程序,已经终止销售,现于免费给大家使用。比其以前的免费版功能增加了:1,整合了论坛

下载
  1. 网络结构: 确保网络的输出层具有与目标输出数量相同的神经元。
  2. 损失函数: 使用 BCEWithLogitsLoss 作为损失函数。
  3. 前向传播: 在前向传播过程中,直接输出网络的原始输出,不需要应用 Softmax 或 Sigmoid 函数,因为 BCEWithLogitsLoss 内部已经包含了 Sigmoid 函数。

代码示例

以下是一个示例代码,展示了如何使用 BCEWithLogitsLoss 构建一个具有多个二元分类输出的神经网络:

import torch
import torch.nn as nn
import torch.optim as optim

class NeuralNet(nn.Module):
    def __init__(self, input_size, hidden_size, num_outputs):
        super(NeuralNet, self).__init__()
        self.fc1 = nn.Linear(input_size, hidden_size)
        self.relu = nn.ReLU()
        self.fc2 = nn.Linear(hidden_size, num_outputs)

    def forward(self, x):
        out = self.fc1(x)
        out = self.relu(out)
        out = self.fc2(out)  # No Sigmoid here!
        return out

# 超参数
input_size = 10
hidden_size = 20
num_outputs = 5
learning_rate = 0.001
num_epochs = 100

# 模型实例化
model = NeuralNet(input_size, hidden_size, num_outputs)

# 损失函数和优化器
criterion = nn.BCEWithLogitsLoss()
optimizer = optim.Adam(model.parameters(), lr=learning_rate)

# 示例数据
input_data = torch.randn(32, input_size) # 32个样本,每个样本10个特征
target_data = torch.randint(0, 2, (32, num_outputs)).float() # 32个样本,每个样本5个二元标签

# 训练循环
for epoch in range(num_epochs):
    # 前向传播
    outputs = model(input_data)
    loss = criterion(outputs, target_data)

    # 反向传播和优化
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

    if (epoch+1) % 10 == 0:
        print (f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')

代码解释:

  • num_outputs: 定义了输出的数量,对应于需要预测的二元标签的数量。
  • BCEWithLogitsLoss(): 选择 BCEWithLogitsLoss 作为损失函数。
  • model(x): 在前向传播过程中,直接输出 fc2 层的输出,不需要应用 Sigmoid 函数。
  • target_data: 目标数据应该是浮点数类型,且值为0或1。

注意事项

  • 数据类型: 确保目标数据(target_data)是 torch.float 类型,并且值是 0 或 1。
  • Sigmoid 函数: 不要在网络的前向传播中显式地应用 Sigmoid 函数,因为 BCEWithLogitsLoss 内部已经包含了 Sigmoid 函数。
  • 输出解释: 网络的输出值是 logits,可以通过 torch.sigmoid(outputs) 将其转换为概率值,用于后续的分析或决策。

总结

使用 BCEWithLogitsLoss 是解决多标签二元分类问题的有效方法。通过正确配置网络结构和损失函数,可以训练一个能够准确预测多个独立二元标签的神经网络。 记住,不要在网络输出层手动添加 Sigmoid 函数,让 BCEWithLogitsLoss 来处理 logits 到概率的转换。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

308

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

222

2025.10.31

css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

578

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

101

2025.10.23

pytorch是干嘛的
pytorch是干嘛的

pytorch是一个基于python的深度学习框架,提供以下主要功能:动态图计算,提供灵活性。强大的张量操作,实现高效处理。自动微分,简化梯度计算。预构建的神经网络模块,简化模型构建。各种优化器,用于性能优化。想了解更多pytorch的相关内容,可以阅读本专题下面的文章。

432

2024.05.29

Python AI机器学习PyTorch教程_Python怎么用PyTorch和TensorFlow做机器学习
Python AI机器学习PyTorch教程_Python怎么用PyTorch和TensorFlow做机器学习

PyTorch 是一种用于构建深度学习模型的功能完备框架,是一种通常用于图像识别和语言处理等应用程序的机器学习。 使用Python 编写,因此对于大多数机器学习开发者而言,学习和使用起来相对简单。 PyTorch 的独特之处在于,它完全支持GPU,并且使用反向模式自动微分技术,因此可以动态修改计算图形。

24

2025.12.22

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

4

2026.01.26

edge浏览器怎样设置主页 edge浏览器自定义设置教程
edge浏览器怎样设置主页 edge浏览器自定义设置教程

在Edge浏览器中设置主页,请依次点击右上角“...”图标 > 设置 > 开始、主页和新建标签页。在“Microsoft Edge 启动时”选择“打开以下页面”,点击“添加新页面”并输入网址。若要使用主页按钮,需在“外观”设置中开启“显示主页按钮”并设定网址。

6

2026.01.26

苹果官方查询网站 苹果手机正品激活查询入口
苹果官方查询网站 苹果手机正品激活查询入口

苹果官方查询网站主要通过 checkcoverage.apple.com/cn/zh/ 进行,可用于查询序列号(SN)对应的保修状态、激活日期及技术支持服务。此外,查找丢失设备请使用 iCloud.com/find,购买信息与物流可访问 Apple (中国大陆) 订单状态页面。

16

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Git 教程
Git 教程

共21课时 | 3万人学习

Git版本控制工具
Git版本控制工具

共8课时 | 1.5万人学习

Git中文开发手册
Git中文开发手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号