news 2026/9/3 2:39:27

PyTorch实现二分类(多特征输出+多层神经网络)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PyTorch实现二分类(多特征输出+多层神经网络)

前置文章:PyTorch实现二分类(单特征输出+单层神经网络)-CSDN博客

⭐处理多维特征输入

在上述实例中,x_data = torch.Tensor([[1.0], [2.0], [3.0]])是二维列表(矩阵),外层列表表示样本集,内层每个列表表示单个样本的特征,即表示输入三个样本,每个样本的维度为1维(1个特征feature)。当输入为多维时,如下所示二分类问题中的维度是8维(3行8列的矩阵)(8个特征features):

x_data = torch.Tensor([[-0.29, 0.49, 0.18, -0.29, 0.00, 0.00, -0.53, -0.03], [-0.88, -0.15, 0.08, -0.41, 0.00, -0.21, -0.77, -0.67], [-0.06, 0.84, 0.05, 0.00, 0.00, -0.31, -0.49, -0.63]]) y_data = torch.Tensor([[0], [1], [0]])

对于多维特征输入,模型的输入也要能够接收输入的多个特征。公式变化如下:

  • 原始公式一个样本只有一个特征,将此特征值代入线性公式后再经过激活函数Sigmoid非线性化后即可得到第个样本对应的输出
  • 变化后公式一个样本有8个特征(),将这8个特征分别进行线性公式(一个特征对应一个权重)后再经过激活函数Sigmoid非线性化后即可得到第个样本对应的输出

实际上就是将公式从标量(单维度)计算转换为矩阵计算:

  • 单样本(一维输入,单维输出):

  • N个样本(二维输入,多维输出):

输出矩阵,输入矩阵,权重矩阵

在PyTorch中我们只需要修改相应层的输入与输出维度即可,如下以线性层为例,将输入的8维数据经过线性层后降维为6维输出数据:

⭐神经网络

对于神经网络而言,就是将网络层堆叠几次,使输入数据的维度不断降低或升高(下面的图片实例是维度不断下降)。如果你最终需要的输出是一个数值,那最终就需要降维到一维,如果最终你需要的输出是一个矩阵那就降维到二维。

至于中间的维度如何变化、需要几层网络层以及需要哪些网络层

  • 上图所示的神经网络结构是全连接层 (Linear) + 激活函数 (σ)堆叠,属于最基础的多层感知机 (MLP),维度变化完全由torch.nn.Linear(in_features, out_features)决定,规则只有一条,就是上一层的输出维度 = 下一层的输入维度。
  • 输入8 维是原始特征,6 维、2 维是抽象特征,最终的1 维是任务输出。之所以要设置中间的8维到6维,6维到2维的隐藏层而不是直接8维到1维,目的是逐层提取核心特征,抛弃冗余信息,让模型学到规律。
  • 层数的选择:隐藏层越多,模型的学习能力越强,所以对于复杂任务(高维特征)隐藏层一般都在3层及以上。但是这并不意味着层数越多越好,模型学习能力过强会将数据的噪点都学习,出现过拟合(Overfitting)现象。
  • 维度的变化:一般使用漏斗型结构,即维度逐渐减小,不建议中间维度突然增大,低维输入强行扩维,会学噪声,过拟合。
  • 网络结构的选择:中间隐藏层的激活函数一般使用ReLU,Sigmoid易出现梯度消失。输出层一般使用Sigmoid(二分类)、Softmax(多分类)。除此之外也可以加一些其他神经网络层,并不只局限于线性层。

模型设计过程:

完整代码实例

在此例中,一个样本输入的特征有8个,要训练出好的模型参数需要的样本数要远远大于8个,这里为了方便只给出了三个样本。

import torch x_data = torch.Tensor([[-0.29, 0.49, 0.18, -0.29, 0.00, 0.00, -0.53, -0.03], [-0.88, -0.15, 0.08, -0.41, 0.00, -0.21, -0.77, -0.67], [-0.06, 0.84, 0.05, 0.00, 0.00, -0.31, -0.49, -0.63]]) y_data = torch.Tensor([[0], [1], [0]]) class Model(torch.nn.Module): def __init__(self): super().__init__() self.linear1 = torch.nn.Linear(8, 6) self.linear2 = torch.nn.Linear(6, 4) self.linear3 = torch.nn.Linear(4, 1) self.sigmoid = torch.nn.Sigmoid() def forward(self, x): x = self.sigmoid(self.linear1(x)) x = self.sigmoid(self.linear2(x)) x = self.sigmoid(self.linear3(x)) return x model = Model() criterion = torch.nn.BCELoss(reduction='sum') optimizer = torch.optim.SGD(model.parameters(), lr=0.01) for epoch in range(10000): y_pred = model(x_data) loss = criterion(y_pred, y_data) if epoch % 1000 == 0: print(f"Epoch: {epoch}, Loss: {loss.item():.4f}") optimizer.zero_grad() loss.backward() optimizer.step() x_test = torch.Tensor([[-0.41, 0.17, 0.21, 0.00, 0.00, 0.24, -0.89, -0.70]]) y_test_pred = model(x_test) print("\n测试结果:") print('y_pred = ', y_test_pred.data)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 21:39:47

使用VSCode调试通义千问3-Reranker-0.6B模型的完整指南

使用VSCode调试通义千问3-Reranker-0.6B模型的完整指南 1. 为什么需要在VSCode里调试Reranker模型 你可能已经下载好了Qwen3-Reranker-0.6B模型,也跑通了基础推理代码,但当结果不如预期时,问题出在哪?是输入格式不对&#xff1f…

作者头像 李华
网站建设 2026/9/2 6:58:28

gemma-3-12b-it应用场景:自媒体运营者截图竞品海报→风格分析+优化建议

Gemma-3-12b-it应用场景:自媒体运营者截图竞品海报→风格分析优化建议 1. 引言 在当今竞争激烈的自媒体领域,如何快速分析竞品海报的设计风格并获取优化建议,是每个运营者都面临的挑战。传统方法需要人工分析色彩、排版、文案等元素&#x…

作者头像 李华
网站建设 2026/9/3 0:45:56

DeepSeek-R1-Distill-Qwen-1.5B模型长期记忆实现:外部知识库集成方案

DeepSeek-R1-Distill-Qwen-1.5B模型长期记忆实现:外部知识库集成方案 1. 为什么小模型也需要长期记忆能力 DeepSeek-R1-Distill-Qwen-1.5B是个很特别的模型。它只有15亿参数,比动辄几十上百亿的大模型轻巧得多,部署起来不费劲,对…

作者头像 李华
网站建设 2026/8/31 12:29:39

还在为文献管理抓狂?这款AI工具让90%研究者效率翻倍

还在为文献管理抓狂?这款AI工具让90%研究者效率翻倍 【免费下载链接】zotero-gpt GPT Meet Zotero. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-gpt 深夜三点,你盯着屏幕上堆积如山的文献,试图从摘要中找出支持论点的关键证…

作者头像 李华
网站建设 2026/9/3 0:43:30

小熊猫Dev-C++完全指南:从入门到精通的C++开发工具使用手册

小熊猫Dev-C完全指南:从入门到精通的C开发工具使用手册 【免费下载链接】Dev-CPP A greatly improved Dev-Cpp 项目地址: https://gitcode.com/gh_mirrors/dev/Dev-CPP 小熊猫Dev-C是一款专为C编程入门者设计的集成开发环境(IDE)&…

作者头像 李华
网站建设 2026/9/3 1:48:43

3步解锁窗口管理新范式:让你的工作效率提升300%

3步解锁窗口管理新范式:让你的工作效率提升300% 【免费下载链接】AlwaysOnTop Make a Windows application always run on top 项目地址: https://gitcode.com/gh_mirrors/al/AlwaysOnTop 一、多窗口时代的"注意力争夺战" 你是否也曾经历过这样的…

作者头像 李华