神经网络介绍及其在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更有用࿰…...

啥?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中两个关联式容器…...

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...

基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...

MySQL的pymysql操作
本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...
Python网页自动化Selenium中文文档
1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API,让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API,你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...
智能职业发展系统:AI驱动的职业规划平台技术解析
智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...