#04 构建您的第一个神经网络:PyTorch入门指南

文章目录

  • 前言
    • 理论基础
      • 神经网络层的组成
      • 前向传播与反向传播
    • 神经网络设计
      • 步骤1:准备数据集
      • 步骤2:构建模型
      • 步骤3:定义损失函数和优化器
      • 步骤4:训练模型
      • 步骤5:评估模型
      • 结论


前言

  在过去的几天里,我们深入了解了深度学习的基础,从安装PyTorch开始,到理解Tensor运算,以及自动微分系统Autograd的工作原理。今天,我们将整合我们所学的知识和技能,并迈出一个重要的步伐:构建和训练我们的第一个神经网络。
在这里插入图片描述

  在本篇博文中,我会指导您如何设计一个简单的全连接神经网络(也称为多层感知机MLP),并使用PyTorch作为您的工具。我们的目标是用这个网络解决一个分类问题,并了解神经网络训练的基本流程。让我们一步一步地进行。

理论基础

  在开始编码之前,让我们先回顾一下全连接神经网络的基本组件和原理。一个典型的神经网络由多个层组成,每个层由多个神经元组成。在全连接网络中,一个层中的每个神经元都与前一层的所有神经元连接。这种密集的连接模式能让网络从输入数据中捕获复杂的模式。

神经网络层的组成

神经网络中的每一层主要包含以下部分:

  1. 输入节点:这些是将数据输入到网络的节点。
  2. 权重:每个连接都有一个权重,它决定了输入信号对神经元的激活程度的影响。
  3. 偏置:每个神经元都有一个偏置,它提供了除了输入以外的另一个调节激活的手段。
  4. 激活函数:它决定了神经元的输出,通常是一个非线性函数,如ReLU或Sigmoid。

前向传播与反向传播

神经网络的训练分为两个阶段:前向传播和反向传播。

  • 前向传播:在这个阶段,输入数据通过网络的每一层,每个神经元根据其权重、偏置和激活函数计算输出。
  • 反向传播:训练的这一部分涉及根据网络输出和实际结果之间的差异来调整权重和偏置。这是通过计算损失函数的梯度并将其反向传播到网络中完成的。

神经网络设计

现在,让我们设计一个简单的神经网络。假设我们要解决的是一个二分类问题,我们的网络将有两个输入节点(对应于两个特征),几个隐藏层,以及一个输出节点。

步骤1:准备数据集

在构建模型之前,我们首先需要准备数据集。通常,我们会对数据进行预处理,如标准化,然后分为训练集和测试集。

import torch
from torch.utils.data import DataLoader, TensorDataset
from sklearn.model_selection import train_test_split# 假设data为特征,labels为标签
data_train, data_test, labels_train, labels_test = train_test_split(data, labels, test_size=0.2)
train_dataset = TensorDataset(torch.tensor(data_train, dtype=torch.float32), torch.tensor(labels_train, dtype=torch.float32))
test_dataset = TensorDataset(torch.tensor(data_test, dtype=torch.float32), torch.tensor(labels_test, dtype=torch.float32))train_loader = DataLoader(dataset=train_dataset, batch_size=64, shuffle=True)
test_loader = DataLoader(dataset=test_dataset, batch_size=64, shuffle=False)

步骤2:构建模型

  接下来,我们将使用PyTorch定义我们的神经网络。我们将使用nn.Module作为基类,并定义我们的层和前向传播方法。

import torch.nn as nn
import torch.nn.functional as Fclass SimpleNN(nn.Module):def __init__(self):super(SimpleNN, self).__init__()self.fc1 = nn.Linear(2, 5)self.fc2 = nn.Linear(5, 1)def forward(self, x):x = F.relu(self.fc1(x))x = torch.sigmoid(self.fc2(x))return xmodel = SimpleNN()

步骤3:定义损失函数和优化器

  损失函数用于评估模型的预测与实际标签之间的差异。优化器用于根据损失函数的梯度更新模型的权重。

import torch.optim as optimcriterion = nn.BCELoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

步骤4:训练模型

训练模型涉及多个迭代(或“epoch”),在每个迭代中,我们将完成一个完整的前向和后向传播过程。

for epoch in range(100):  # 举例迭代100次for inputs, labels in train_loader:optimizer.zero_grad()outputs = model(inputs)loss = criterion(outputs.squeeze(), labels)loss.backward()optimizer.step()

步骤5:评估模型

最后,我们需要评估我们的模型性能,通常使用测试集来完成这个任务。

correct = 0
total = 0
with torch.no_grad():for inputs, labels in test_loader:outputs = model(inputs)predicted = outputs.round().squeeze()  # 将输出四舍五入为0或1total += labels.size(0)correct += (predicted == labels).sum().item()print(f'Accuracy: {100 * correct / total}%')

结论

  在以上步骤中,我们从头开始构建了一个简单的神经网络,并在PyTorch中进行了训练和评估。这个过程涵盖了许多重要的概念和技巧,是进一步学习深度学习的坚实基础。

  值得注意的是,真实世界的神经网络要复杂得多,涉及到更复杂的数据预处理、更深的网络结构、正则化技术,以及更精细的训练技巧。但通过这个基本的例子,我们已经开始了深度学习之旅,并为未来的学习打下了坚实的基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3031460.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

InLine Chat功能优化对标Github Copilot,CodeGeeX带来更高效、更直观的编程体验!

VSCode中的CodeGeeX 插件上线InLine Chat功能后,收到不少用户的反馈,大家对行内交互编程这一功能非常感兴趣。近期我们针对这个功能再次进行了深度优化,今天详细介绍已经在VSCode插件v2.8.0版本上线的 CodeGeeX InLine Chat功能,以…

C++ 多态的相关问题

目录 1. 第一题 2. 第二题 3. inline 函数可以是虚函数吗 4. 静态成员函数可以是虚函数吗 5. 构造函数可以是虚函数吗 6. 析构函数可以是虚函数吗 7. 拷贝构造和赋值运算符重载可以是虚函数吗 8. 对象访问普通函数快还是访问虚函数快 9. 虚函数表是什么阶段生成的&…

SQL的命令

目录 创建用户 ​编辑 DDL数据库操作 查询 创建 使用 删除 创建数据库表 在表中修改字段 查询表 DML 添加数据 修改 删除 DQL 查询 创建用户 DDL数据库操作 查询 show databases; 创建 权限问题导致无法创建,连接root修改用户权限 CREATE DATABAS…

企业微信创建应用(一)

登录到企业微信后台管理(https://work.weixin.qq.com/)进入自建应用(应用管理-应用-创建应用) 3.查看参数AgentId和 Secret 4.企业微信查看效果

报表控件Stimulsoft指南:在 JavaScript 报告工具中使用节点计划

我们最近发布了一篇关于使用Quartz.NET 库自动执行报告任务的文章。继续这个主题,今天我们将深入探讨我们的报告如何与 Node Schedule 作业调度程序集成。 Stimulsoft Ultimate (原Stimulsoft Reports.Ultimate)是用于创建报表和仪表板的通用…

《C语言文件处理:从新手到高手的跃迁》

📃博客主页: 小镇敲码人 💚代码仓库,欢迎访问 🚀 欢迎关注:👍点赞 👂🏽留言 😍收藏 🌏 任尔江湖满血骨,我自踏雪寻梅香。 万千浮云遮碧…

matlab-贪婪算法寻找最小覆盖

文章目录 一、最小结点集是什么二、贪婪算法实现查找最小结点集代码结果 一、最小结点集是什么 最小覆盖集(也称为最小点覆盖集)是图论中的一个重要概念,指的是一个节点子集,使得图中的每一条边都与这个子集中的至少一个节点关联…

一款助力工程项目管理智能化的神器——企智汇工程项目管理系统!

大家好,今天我要向大家介绍一款能够助力工程项目管理智能化的神器——企智汇工程项目管理系统。 在工程项目管理中,信息不对称、数据不共享、沟通不畅等问题一直困扰着管理者和工程师们。而企智汇正是为了解决这些问题而生的。 一、项目全过程可视化&a…

qt: undefined reference to `vtable for aaa‘

版本qt4.8.6&#xff0c;编译报错“main.cpp:(.text0x3b): undefined reference to vtable for aaa” 就一个main.cpp #include <QApplication> #include <QTimer> #include <QCursor> #include <QMouseEvent> #include <QDesktopWidget> #inc…

力扣每日一题-统计已测试设备-2024.5.10

力扣题目&#xff1a;统计已测试设备 题目链接: 2960.统计已测试设备 题目描述 代码思路 根据题目内容&#xff0c;第一感是根据题目模拟整个过程&#xff0c;在每一步中修改所有设备的电量百分比。但稍加思索&#xff0c;发现可以利用已测试设备的数量作为需要减少的设备电…

解决 git 因输入密码错误而导致的报错无法推送问题

报错内容如下&#xff1a; > git push origin master:master fatal: unable to access https://gitee.com/spring-in-huangxian-county/web-tts-vue.git/: OpenSSL SSL_connect: Connection was reset in connection to gitee.com:443 出错原因 根本原因是本机存储的 账户…

三下乡社会实践投稿攻略在这里

在当今信息爆炸的时代&#xff0c;如何让自己的声音被更多人听到&#xff0c;成为许多人和企业所关心的问题。其中&#xff0c;向各大媒体网站投稿&#xff0c;成为了一种常见的宣传方式。但是&#xff0c;如何投稿各大媒体网站&#xff1f;新闻媒体发文策略又有哪些呢&#xf…

探秘未来科技:数字化无人巡检的奇妙之旅

嘿&#xff0c;朋友们&#xff01;下午茶时间到&#xff01;趁着这会儿咱们来聊一个超级炫酷的话题——数字化无人巡检。想象一下&#xff0c;那些曾经需要人工跋山涉水、风吹日晒的巡检工作&#xff0c;现在正被一群“智能小分队”悄悄接手&#xff0c;是不是觉得既神奇又方便…

【C++】C++中的template模板

一、泛型编程 关于模板的出现其实是在广大程序员编程中偷懒省下来的。我举个例子你们就知道了。 下述例子是用来实现swap函数的&#xff0c;利用的方式是最基础的重载。 void Swap(int& left, int& right) {int temp left;left right;right temp; } void Swap(d…

仿真算法验证成功后,如何快速实现真机无缝切换?

Prometheus仿真优势 首先&#xff0c;我们先通过下面这个视频了解一下Prometheus仿真有哪些优势&#xff1a; 开源自主无人机平台重大更新&#xff01;Promethus仿真到真机无缝切换 Prometheus仿真最大的优势之一是采用了模块化设计&#xff0c;对每个操作节点进行了封装&…

Ubuntu20.04 设置路由器

1. 网络拓扑图 2. 查看网卡信息 ip a得出如下网卡信息&#xff0c;enp1s0和enp2s0为两个网卡名称&#xff0c;以及相关两个网卡的详细信息&#xff0c;不同设备的网卡名称可能不一样 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group defaul…

idea-自我快捷键-2

1. 书签 创建书签&#xff1a; 创建书签&#xff1a;F11创建特色标记书签&#xff1a;Ctrl F11快速添加助记符书签&#xff1a;ctrl shift 数字键 查看书签&#xff1a; shift F11快速定位到助记符书签&#xff1a;Ctrl 数字键 删除书签&#xff1a; delete 2. 自动…

设计模式 六大原则之单一职责原则

文章目录 概述代码例子小结 概述 先看下定义吧&#xff0c;如下&#xff1a; 单一职责原则的定义描述非常简单&#xff0c;也不难理解。一个类只负责完成一个职责或者功能。也就是说在类的设计中&#xff0c; 我们不要设计大而全的类,而是要设计粒度小、功能单一的类。 代码例…

Android之给Button上添加按压效果

一、配置stateListAnimator参数实现按压效果 1、按钮控件 <Buttonandroid:id"id/mBtnLogin"android:layout_width"match_parent"android:layout_height"48dp"android:background"drawable/shape_jfrb_login_button"android:state…

无人播剧直播收益在哪里!快手无人播剧新秘籍:版权无忧,日入四位数攻略

无人播剧顾名思义就是通过短视频平台直播不需要真人出镜受众群体通过网络短视频平台看到的经典影视剧集可以实现24小时不停断的播放利用多种途径变现的一种直播形式 1、操作简单、不露脸、不出镜2、手机、电脑都可以操作3、可以矩阵操作4、0粉丝、0作品、0保证金就可以开播5、…