当前位置: 首页 > news >正文

神经网络介绍及其在Python中的应用(一)

在这里插入图片描述

作者简介:热爱数据分析,学习Python、Stata、SPSS等统计语言的小高同学~
个人主页:小高要坚强的博客
当前专栏:Python之机器学习
本文内容:神经网络介绍及其在Python中的线性回归应用
作者“三要”格言:要坚强、要努力、要学习

目录

  • 一、神经网络原理详解
    • 1. 神经网络的基本结构
    • 2.神经元模型
    • 3. 激活函数
    • 4.前向传播
    • 5.反向传播
    • 6. 损失函数
    • 7.优化算法
    • 8.训练过程
  • 二、Python中的神经网络实现
    • 代码详解
      • 1.数据构造
      • 2.定义神经网络
      • 3.CUDA支持
      • 4.损失函数与优化器
      • 5.绘图函数
      • 6.训练过程
  • 三、总结

一、神经网络原理详解

1. 神经网络的基本结构

神经网络由输入层、隐藏层和输出层组成。每层由多个神经元(节点)构成。以下是各层的功能:

  • 输入层:接收外部数据,每个输入对应一个神经元。
  • 隐藏层:进行特征提取和模式识别。可以有多个隐藏层,层数越多,模型越复杂,能够学习到更复杂的特征。
  • 输出层:生成最终的预测结果,节点数量根据具体任务而定(如分类任务的类别数)。

2.神经元模型

每个神经元的计算过程可以表示为:
y=f(w⋅x+b)

  • x:输入向量。
  • w:权重向量,决定输入对输出的影响。
  • b:偏置项,调整输出值。
  • f:激活函数,用于引入非线性。

3. 激活函数

激活函数在神经元的输出中引入非线性,常用的激活函数包括:

Sigmoid:输出范围在(0, 1)之间,适合二分类任务。
在这里插入图片描述
ReLU(Rectified Linear Unit):输出为输入值的正部分,避免了梯度消失问题。
在这里插入图片描述

Tanh:输出范围在(-1, 1)之间,常用于隐藏层。

4.前向传播

前向传播是指输入数据通过网络传播,直到输出结果的过程。每个神经元接收输入,应用权重和激活函数,最终生成输出。

具体过程如下:

  • 输入数据通过输入层进入。
  • 加权求和:每个神经元将输入值与权重相乘后相加,并加上偏置。
  • 应用激活函数:输出结果通过激活函数生成。
  • 结果传递:输出结果传递给下一层神经元,直到输出层。

5.反向传播

反向传播是神经网络学习的核心算法,通过最小化损失函数来更新权重和偏置。其步骤如下:

  • 计算损失:使用损失函数(如均方误差)计算输出和真实标签之间的误差。
  • 计算梯度:通过链式法则,计算损失函数关于每个权重的梯度。
  • 更新权重:使用优化器(如SGD或Adam)根据计算得到的梯度调整权重和偏置。

6. 损失函数

损失函数衡量模型预测与真实值之间的差异。常用的损失函数包括:

  • 均方误差(MSE):适合回归问题,公式为:
    在这里插入图片描述
  • 交叉熵损失:适合分类问题,公式为:
    在这里插入图片描述

7.优化算法

优化算法用于更新神经网络的权重,以减少损失。常用的优化算法有:

  • 随机梯度下降(SGD):每次仅使用一个样本更新权重,计算效率高,但可能在局部极小值处震荡。
  • Adam优化器:结合了Momentum和RMSProp的优点,能够自适应调整学习率,效果通常较好。

8.训练过程

整个训练过程可以分为以下几个步骤:

  • 数据准备:加载并预处理数据,划分为训练集和测试集。
  • 模型初始化:定义神经网络模型,选择损失函数和优化器。
  • 训练循环:在每个epoch中,进行前向传播、计算损失、反向传播和权重更新。
  • 评估性能:在验证集上评估模型性能,监控过拟合情况。

二、Python中的神经网络实现

我们将通过以下代码实现一个简单的线性回归模型,并逐步解释每个部分。

import torch
import matplotlib.pyplot as plt
import os
from torch import nn, optim
from time import perf_counter# 为了防止有些版本的jupyter kernel崩溃,设置这个属性
os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'# 源数据构造
X = torch.unsqueeze(torch.linspace(-3, 3, 100000), dim=1)  # 扩维
Y = X + 1.2 * torch.rand(X.size())  # 添加噪声# 神经网络实现线性回归
class LR(nn.Module):  # 网络模型必须继承nn.Module类def __init__(self):super(LR, self).__init__() # 调用父类构造方法self.linear = nn.Linear(in_features=1, out_features=1)def forward(self, x):  # 前向传播方法,x参数接收输入数据out = self.linear(x)  # 线性加权操作return out# 判断CUDA加速
CUDA = torch.cuda.is_available()
if CUDA:LR_module = LR().cuda()  # 将模型移动到GPUinputs = X.cuda()targets = Y.cuda()
else:LR_module = LR()inputs = X
targets = Y# 损失函数和优化器
criterion = nn.MSELoss()  # 均方误差损失
optimizer = optim.SGD(LR_module.parameters(), lr=1e-4)  # 随机梯度下降优化器# 绘图函数
def draw(output, loss):if CUDA:output = output.cpu()  # 将数据移回CPU以进行绘图plt.cla()plt.scatter(X.numpy(), Y.numpy())  # 原始数据散点图plt.plot(X.numpy(), output.data.numpy(), 'r-', lw=5)  # 绘制拟合直线plt.text(0.5, 0, 'Loss=%s' % (loss.item()), fontdict={'size': 20, 'color': 'red'})plt.pause(0.005)# 训练函数
def train(model, criterion, optimizer, epochs):for epoch in range(epochs):output = model(inputs)  # 调用神经网络对象进行前向传播loss = criterion(output, targets)  # 损失函数的值optimizer.zero_grad()  #清空上一轮的梯度值loss.backward()  # 反向传播,计算梯度optimizer.step()  #  更新权重值if epoch % 80 == 0:  # 每80轮绘制图,观察训练效果,epoch为整个训练集通过网络进行一次前向和一次反向传播的过程draw(output, loss)return model, loss# 调用测试
start = perf_counter()
model, loss = train(LR_module, criterion, optimizer, epochs=5000)
finish = perf_counter()
time_total = finish - start
print("训练耗费时间:%s" % time_total)
print("final loss:", loss.item())
print("weights:", list(model.parameters()))

代码详解

1.数据构造

  • X为输入特征,从-3到3的100,000个均匀分布的点。
  • Y是目标值,加入了随机噪声,使得模型更具挑战性。

2.定义神经网络

  • LR类继承自nn.Module,其中self.linear定义了一个线性层,输入和输出特征均为1。

3.CUDA支持

  • 检查是否可以使用CUDA加速,如果可以,则将模型和数据移动到GPU。

4.损失函数与优化器

  • 使用均方误差损失函数(MSELoss)和随机梯度下降(SGD)作为优化器。

5.绘图函数

  • draw函数用于实时显示训练过程中的数据点和模型拟合结果。

6.训练过程

  • train函数中,进行前向传播、计算损失、反向传播和权重更新。每80个epoch绘制一次图以观察训练进展。

通过上述代码,我们实现了一个简单的线性回归模型,演示了神经网络的基本构建和训练过程。

三、总结

神经网络通过层叠多个非线性变换,能够学习到复杂的模式和特征。在实际应用中,通过选择合适的架构、激活函数和优化算法,可以实现高效的模型训练和预测。随着深度学习技术的不断发展,神经网络将在更广泛的领域发挥作用。

在这里插入图片描述

码字艰辛,本篇内容就分享至此,如果渴望深入了解更多Python机器学习方面的应用,别忘了点击关注博主,引导你从零开始探索Python在统计分析上的奥秘。同时,对于在数据分析与机器学习旅程中感到迷茫的朋友们,欢迎浏览我的专题系列:《Python之机器学习》,让我们一起努力坚强学习,共同进步吧~

请添加图片描述

相关文章:

神经网络介绍及其在Python中的应用(一)

作者简介:热爱数据分析,学习Python、Stata、SPSS等统计语言的小高同学~ 个人主页:小高要坚强的博客 当前专栏:Python之机器学习 本文内容:神经网络介绍及其在Python中的线性回归应用 作者“三要”格言:要坚…...

数据流处理技术与Flink框架

一数据流 数据流定义: 数据流(Data Stream)是指数据以连续不断的方式到达和处理的序列。在现实世界中,许多数据来源都是以流的形式存在,比如: 1. 用户行为:用户在网站上的点击流、移动应用中…...

qt中QTatlewidget类常用操作表格的函数有哪些?

在Qt中,QTableWidget 类提供了丰富的函数来操作表格数据。以下是一些常用的操作表格的函数: 1. 初始化与配置 构造函数:QTableWidget(int rows, int columns, QWidget *parent nullptr):创建一个指定行数和列数的表格控件。设置…...

Linux上的C/C++编程

Linux上的C/C编程 yum软件包管理器Linux编辑器-vimvim命令模式指令集vim末行模式指令集 gcc/g的使用Linux自动化编译工具-make/MakefileLinux调试器-gdb调试命令 多人合作工具git yum软件包管理器 yum 是Linux上常用的包管理器,类似于Windows上的“应用商店”。 语…...

注意 秋季饮酒的正确打开方式

选择合适的白酒1.秋季气候干燥,适合选择一些口感醇厚、温润的白酒。比如酱香型白酒,它具有浓郁的香气和醇厚的口感,能在秋季给你带来温暖的感觉。2.浓香型白酒也是不错的选择,香气扑鼻,口感绵甜,能为秋季增…...

Python如何配置环境变量详解

一、概述 前提:已安装 Python,如下图: 1.1 检查是否已配置成功(选) 1 2 3 4 5 1. 打开运行窗口 (1) 快捷键 : Win r,并输入 cmd (2) 直接输入: Python 2. 若有下列提示,即为 安装成功…...

Linux驱动开发(速记版)--并发与竞争

第十八章 并发与竞争 18.1 并发与竞争 18.1.1 并发 早期计算机 CPU单核心时,由于 CPU执行速度快于I/O操作,常因等待 I/O而空闲。 为提高 CPU利用率,引入了并发执行理论。并发通过算法在CPU执行I/O等待时切换至其他任务,使多个任…...

AI赋能,数字技术服务平台促进产业协同发展

在当今数字化浪潮席卷全球的时代,数字技术服务平台应运而生,成为推动各行业发展的强大引擎。数字技术服务平台是一个汇聚了众多先进数字技术和资源的综合性服务体系。它就像是一个功能强大的百宝箱,为用户提供了全方位的数字技术支持。 在这…...

RabbitMQ下载安装运行环境搭建

RabbitMQ运行环境搭建 1、Erlang及RabbitMQ安装版本的选择2、下载安装Erlang2.1、下载Erlang2.2、安装Erlang2.2.1、安装Erlang前先安装Linux依赖库2.2.2、解压Erlang压缩包文件2.2.3、配置2.2.4、编译2.2.5、安装2.2.6、验证erlang是否安装成功 3、RabbitMQ下载安装3.1、下载3…...

Redis过期时间删除策略详解

文章目录 Redis过期时间删除策略详解一、引言二、Redis过期键删除策略1、定时删除2、惰性删除3、定期删除 三、Redis实际采用的策略1、惰性删除Java 伪代码 2、定期删除Java 伪代码 四、总结 Redis过期时间删除策略详解 一、引言 在许多应用程序中,我们经常需要缓…...

mysql数据库的基本管理

目录 一.数据库的介绍 二.mariadb的安装 三.软件基本信息 四.数据库开启 五.数据库的安全初始化 六.数据库的基本管理 七.数据密码管理 八.用户授权 九.数据库的备份 十.web控制器 一.数据库的介绍 1.什么是数据库 数据库就是个高级的表格软件 2.常见数据库 Mysql Oracl…...

根据现有html里的元素上面动态创建el-tooltip组件并显示的几种方式

1、 在这个示例中,我们创建了一个 ref 引用来指向我们想要附加 Tooltip 的 DOM 元素。然后在 onMounted 生命周期钩子中,我们创建了 Tooltip 组件的实例,并将其挂载到一个新创建的 DOM 元素上。我们还在触发元素上添加了 mouseenter 和 mouse…...

【C++篇】迈入新世界的大门——初识C++(上篇)

文章目录 前言 下篇已出:【C篇】迈入新世界的大门——初识C(下篇) C发展历史 C起源 与C语言一样,C也是在贝尔实验室诞生的,Bjarne Stroustrup于20世纪80年代在这里开发出了这种语言。Stroustrup比较关系的是让C更有用&#xff0…...

啥?Bing搜索古早BUG至今未改?

首先,大家先看下面的一个数学公式。 Γ ( z ) ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)∫0∞​tz−1e−tdt. 看不懂?没关系,因为我也看不懂 这不是谈论的重点。 当你把鼠标光标移到公式的最开头&…...

ValueError: Out of range float values are not JSON compliant

可能原因一 可能原因二 数据里面有NaN...

【架构】NewSQL

文章目录 NewSQLTiDBTiDB 主要组件特点使用场景安装与部署 推荐阅读 NewSQL NewSQL是一种数据库管理系统(DBMS)的类别,它结合了NoSQL数据库的可扩展性和传统SQL数据库的事务一致性。具体来说,NewSQL数据库旨在解决传统关系型数据库在处理大规模并发事务…...

禁止吸烟监测系统 基于图像处理的吸烟检测系统 YOLOv7

吸烟是引发火灾的重要原因之一。烟头在未熄灭的情况下,其表面温度可达200℃-300℃,中心温度甚至能高达700℃-800℃。在易燃、易爆的生产环境中,如化工厂、加油站、仓库等,一个小小的烟头就可能引发灾难性的火灾,造成巨…...

《中国工程科学》

《中国工程科学》为工程科技战略咨询学术期刊,主要发布我国工程科技战略咨询研究成果,以及工程科技各领域前瞻性综合研究成果,为政府科学决策提供参谋、为行业科学发展提供指导、为相关学术研究提供参考。 一、2024年度征稿主题 本刊以专题…...

碳钢液动紧急切断阀QDY421F-16C DN200

在深入探讨碳钢液动紧急切断阀QDY421F-16C DN200的卓越性能与应用场景时,不得不提及其在化工、石油、天然气等高危行业中的核心地位。这款阀门以其高度的自动化控制能力和快速响应机制,成为了保障生产安全、防止介质泄漏的关键防线。 其内置的液动执行机…...

【C++】红黑树的封装——同时实现map和set

目录 红黑树的完善默认成员函数迭代器的增加 红黑树的封装红黑树模板参数的控制仿函数解决取K问题对Key的非法操作 insert的调整map的[]运算符重载 在list模拟实现一文中,介绍了如何使用同一份代码封装出list的普通迭代器和const迭代器。今天学习STL中两个关联式容器…...

网络编程(UDP编程)

思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如&#xff1a…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践,很多人以为AI已经强大到不需要程序员了,其实不是,AI更加需要程序员,普通人…...

Android Framework预装traceroute执行文件到system/bin下

文章目录 Android SDK中寻找traceroute代码内置traceroute到SDK中traceroute参数说明-I 参数(使用 ICMP Echo 请求)-T 参数(使用 TCP SYN 包) 相关文章 Android SDK中寻找traceroute代码 设备使用的是Android 11,在/s…...