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

Neural networks 神经网络

发展时间线

基础概念

多层神经网络结构

神经网络中一个网络层的数学表达

TensorFlow实践

创建网络层

神经网络的创建、训练与推理

推理

推理可以理解为执行一次前向传播

前向传播

前向传播直观数学表达

前向传播直观数学表达的Python实现

前向传播向量化实现

相关数学知识

向量点积(内积)示例

矩阵乘法示例

训练

相比前面TensorFlow实践中的步骤简化,这里细化了如何compile和fit模型。

TensorFlow实践

底层原理

1. 明确逻辑回归表达式及激活函数

2. 明确损失函数及成本函数

3. 开始训练,并最小化成本函数

激活函数

为什么需要激活函数

当你网络中每一层都不使用激活函数(即每一层都使用线性激活函数),根据下图的推导会发现不管你有几层最终的输出还是跟输入是线性的,因此最终实现的都是一个线性回归,而很多问题不是线性回归能够描述的。

常见激活函数

前面所有例子使用的激活函数都是sigmod,但是实际还有其他可替代的,比如下面的ReLU(Rectified Linear Unit),不需要关注全称

输出层激活函数选择

根据你要输出的性质选择,一般不存疑

隐藏层激活函数选择

现在绝大多数情况下会选择ReLU作为隐藏层的激活函数,两个原因:

1. 计算量更小

2. 只有 z < 0 时曲线的梯度(斜率)很小(为0),而sigmod函数在两侧梯度都很小,收敛更慢

多类分类:SoftMax回归

前面举的例子都是解决二分类问题,非0即1,但是实践中经常有多类分类问题,比如要识别0-9的数字

数值稳定的回归

多标签分类

跟多类分类要区分开,多类分类是指n类选命中哪1类,多标签分类是指n个标签命中其中m个标签,每个标签是二值

梯度下降优化算法:Adam算法

adaptive moment estimation(自适应矩估计),该算法是梯度下降的优化算法,效率更高,课程没有讲Adma算法的具体实现,但是实现的大致原理是:动态调整学习率α,梯度下降过程中,多次朝同一个方向下降的时候放大学习率,来回震荡时缩小学习率

神经网络层类型(layer type)

全连接层(dense layer)

每个神经元的输入是前一层所有输出(activation outputs)。

卷积层(convolutional layer)

每个神经元的输入是前一层部分输出。在某些场景会比全连接层效果更好,不过没讲分别适用的场景

为什么需要卷积层:

1. 减少计算量,加快计算速度

2. 减少训练需要的样本量,更不容易出现过拟合

反向传播

将计算损失的过程生成一个计算图,前向传播可以计算各个中间变量以及最终损失,而通过反向传播则可以通过导数的链式计算,逐步获取到J对所有参数的偏导数在该训练数据下的值

应用机器学习的建议

模型评估

数据集中圈出大部分数据用于训练并记录为训练集,留出少部分进行test并记录为测试集。可以分别对测试集和训练集计算最终模型的误差,注意计算误差的时候不再计算正则化项。

分类问题中也可以使用下图的匹配数量计算训练集和测试集的误差

训练集/交叉验证集/测试集 评估误差

偏差与方差(bias/variance)

作用

J_{train}(\vec{w}, b) 很高、J_{cv}(\vec{w}, b) \approx J_{train}(\vec{w}, b),说明高偏差,拟合度不足

J_{train}(\vec{w}, b)很低、J_{cv}(\vec{w}, b) 很高,说明高方差,过拟合

J_{train}(\vec{w}, b) 很高、J_{cv}(\vec{w}, b) \gg J_{train}(\vec{w}, b),说明高偏差、更高方差,说明在部分数据上过拟合,部分数据拟合不足

正则化对偏差/方差的影响

1. λ 接近 0 时,相当于没有正则化,会产生过拟合

2. λ 接近无穷大时,相当于w稍微有值

确定模型的基线水平

你需要将 J_{train}(\vec{w}, b)J_{cv}(\vec{w}, b) 与基线水平对比差距以判断偏差与方差,而不是根据他们的绝对值判断偏差与方差。确定基线水平有以下几种方式

1. 人类表现水平

2. 竞品/同类算法表现水平

3. 基于经验猜测目标水平

学习曲线

因为随着加入的训练数据变多,拟合越来越难满足所有数据,所以 J_{train}(\vec{w}, b) 逐步增大,而 J_{cv}(\vec{w}, b) 逐渐减小,但还是会大于 J_{train}(\vec{w}, b)

高偏差

高偏差情况下,J_{train}(\vec{w}, b) 和 J_{cv}(\vec{w}, b) 都高于基线水平,即使增加数据集也不能缓解,所以增加数据集规模没有作用

高方差

高方差情况下,基线水平处于 J_{train}(\vec{w}, b) 和 J_{cv}(\vec{w}, b) 之间,增加数据集大小可以降低 J_{cv}(\vec{w}, b),即可以提高模型性能

如何优化模型性能

经过合适的正则化之后的更大的模型通常表现要比更小的模型更好或者相仿,但是相应地会增加训练和推理的成本

机器学习开发流程

误差分析

通过对交叉验证集中预测错误的数据,抽样出合理数量的数据,对这些误差数据进行归类分析,将注意力集中到高频出现的问题上,以确定下一步要优化的优先级并针对高优优化类别分析改进方案

如何添加训练数据
收集更多数据

增加误差分析中占比比较多的分类的数据,可以有效提高模型性能

数据增强(data augmentation)

主要应用于图像、音频领域,对已有的训练数据做一定的变换(放大、所有、旋转、失真)作为新的同标签训练数据,提高模型性能

数据合成

基本上也只是用于计算机视觉,很少用于其他领域。例如想训练文本识别模型,可以在电脑上使用不同字体、不同颜色、不同对比度生成文本作为训练集

迁移学习
概念

迁移学习是指复用其他已经经过训练的模型参数和结构,然后替换掉输出层,再基于你自己的训练集进行再训练。此时你复用的模型成为预训练(pre training)模型,而再训练过程成为微调(fine tuning)。这使得你可以站在巨人的肩膀上实现你自己的模型功能,感谢这些乐于分享自己训练好的模型的人吧,有机会你也可以尝试回馈社区。

微调也有两种方式:

1. 你自己的数据集比较小,只微调输出层参数

2. 你自己的数据集比较大,可以同时微调隐藏层和输出层的所有参数

示例

比如下图例子,使用其他人训练好的判断图片是否存在猫、狗、骑车、人的模型和参数,替换输出层之后使用数据集训练为识别数字的模型。

什么情况可以进行迁移学习

预训练和微调模型的输入类型必须是相同的。此时每个隐藏层在预训练和微调时可能发挥类似的作用,比如前面的图像识别示例中,可能第一个隐藏层都在检测边,第二个隐藏层在检测角,第三层再检测曲线/形状。

倾斜数据集

示例

罕见病检测中,一种罕见病发病率仅为0.5%,那么即使是一个永远输出y=0的程序,准确率也达到了99.5%,所以这时只用准确率来评判检测模型的性能是不够的

准确率与召回率

两者之间的取舍

使用F1 score(调和平均数 harmonic mean)

相关文章:

Neural networks 神经网络

发展时间线 基础概念 多层神经网络结构 神经网络中一个网络层的数学表达 TensorFlow实践 创建网络层 神经网络的创建、训练与推理 推理 推理可以理解为执行一次前向传播 前向传播 前向传播直观数学表达 前向传播直观数学表达的Python实现 前向传播向量化实现 相关数学知识…...

汽车免拆诊断案例 | 2007 款日产天籁车起步加速时偶尔抖动

故障现象  一辆2007款日产天籁车&#xff0c;搭载VQ23发动机&#xff08;气缸编号如图1所示&#xff0c;点火顺序为1-2-3-4-5-6&#xff09;&#xff0c;累计行驶里程约为21万km。车主反映&#xff0c;该车起步加速时偶尔抖动&#xff0c;且行驶中加速无力。 图1 VQ23发动机…...

代码随想录day3

203:移除链表元素&#xff1a;注意虚拟头节点的使用 ListNode* removeElements(ListNode* head, int val) {ListNode* result new ListNode();result->next head;ListNode* current result;while(current ! nullptr && current->next ! nullptr){if(current-…...

Spring 面试题【每日20道】【其一】

1、Spring 当中什么是循环依赖&#xff08;常问&#xff09;&#xff1f; 中等 在Spring框架中&#xff0c;循环依赖&#xff08;Circular Dependency&#xff09;是指两个或多个bean互相之间直接或间接地依赖对方的注入。例如&#xff1a; A bean依赖于B bean。B bean又依赖…...

leetcode刷题记录(八十九)——35. 搜索插入位置

&#xff08;一&#xff09;问题描述 35. 搜索插入位置 - 力扣&#xff08;LeetCode&#xff09;35. 搜索插入位置 - 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位…...

Flutter 与 React 前端框架对比:深入分析与实战示例

Flutter 与 React 前端框架对比&#xff1a;深入分析与实战示例 在现代前端开发中&#xff0c;Flutter 和 React 是两个非常流行的框架。Flutter 是 Google 推出的跨平台开发框架&#xff0c;支持从一个代码库生成 iOS、Android、Web 和桌面应用&#xff1b;React 则是 Facebo…...

基于Docker的Spark分布式集群

目录 1. 说明 2. 服务器规划 3. 步骤 3.1 要点 3.2 配置文件 3.2 访问Spark Master 4. 使用测试 5. 参考 1. 说明 以docker容器方式实现apache spark计算集群&#xff0c;能灵活的增减配置与worker数目。 2. 服务器规划 服务器 (1master, 3workers) ip开放端口备注ce…...

Web 代理、爬行器和爬虫

目录 Web 在线网页代理服务器的使用方法Web 在线网页代理服务器使用流程详解注意事项 Web 请求和响应中的代理方式Web 开发中的请求方法借助代理进行文件下载的示例 Web 服务器请求代理方式代理、网关和隧道的概念参考文献说明 爬虫的工作原理及案例网络爬虫概述爬虫工作原理 W…...

MySQL 事件调度器

MySQL 事件调度器确实是一个更方便且内置的解决方案&#xff0c;可以在 MySQL 服务器端自动定期执行表优化操作&#xff0c;无需依赖外部工具或应用程序代码。这种方式也能减少数据库维护的复杂性&#xff0c;尤其适用于在数据库频繁更新或删除时进行自动化优化。 使用 MySQL …...

直线拟合例子 ,岭回归拟合直线

目录 直线拟合,算出离群点 岭回归拟合直线&#xff1a; 直线拟合,算出离群点 import cv2 import numpy as np# 输入的点 points np.array([[51, 149],[122, 374],[225, 376],[340, 382],[463, 391],[535, 298],[596, 400],[689, 406],[821, 407] ], dtypenp.float32)# 使用…...

Flutter android debug 编译报错问题。插件编译报错

下面相关内容 都以 Mac 电脑为例子。 一、问题 起因&#xff1a;&#xff08;更新 Android studio 2024.2.2.13、 Flutter SDK 3.27.2&#xff09; 最近 2025年 1 月 左右&#xff0c;我更新了 Android studio 和 Flutter SDK 再运行就会出现下面的问题。当然 下面的提示只是其…...

关于IPD流程的学习理解和使用

IPD&#xff08;Integrated Product Development&#xff0c;集成产品开发&#xff09;是一种系统化的产品开发流程和方法论&#xff0c;旨在通过跨职能团队的协作和并行工程&#xff0c;缩短产品开发周期&#xff0c;提高产品质量&#xff0c;降低开发成本。IPD 最初由美国 PR…...

C# 类(Class)

C# 类&#xff08;Class&#xff09; 概述 在C#编程语言中&#xff0c;类&#xff08;Class&#xff09;是面向对象编程&#xff08;OOP&#xff09;的核心概念之一。类是一种用户定义的数据类型&#xff0c;它包含了一组属性&#xff08;数据&#xff09;和方法&#xff08;…...

Jenkins pipline怎么设置定时跑脚本

目录 示例&#xff1a;在Jenkins Pipeline中设置定时触发 使用pipeline指令设置定时触发 使用Declarative Pipeline设置定时触发 使用Scripted Pipeline设置定时触发 解释Cron表达式 保存和应用配置 小结 在Jenkins中&#xff0c;定时跑脚本&#xff08;例如定时执行Pip…...

PostgreSQL模糊查询相关学习参考

PostgreSQL大数据量快速模糊检索实践_postgresql 模糊查询-CSDN博客文章浏览阅读1.5k次&#xff0c;点赞20次&#xff0c;收藏25次。注意&#xff1a; 本文内容于 2024-08-18 23:50:33 创建&#xff0c;可能不会在此平台上进行更新。。_postgresql 模糊查询https://blog.csdn.n…...

【电脑无法通过鼠标和键盘唤醒应该怎么办】

【电脑无法通过鼠标和键盘唤醒应该怎么办】 方法一(有时候不起作用):方法二(方法一无效时,使用方法二): 方法一(有时候不起作用): 方法二(方法一无效时,使用方法二):...

Java 大视界 -- Java 大数据中的数据脱敏技术与合规实践(60)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

Vue3.5 企业级管理系统实战(三):页面布局及样式处理 (Scss UnoCSS )

本章主要是关于整体页面布局及样式处理&#xff0c;在进行这一章代码前&#xff0c;先将前两章中的示例代码部分删除&#xff08;如Home.vue、About.vue、counter.ts、App.vue中引用等&#xff09; 1 整体页面布局 页面整体布局构成了产品的框架基础&#xff0c;通常涵盖主导…...

【xcode 16.2】升级xcode后mac端flutter版的sentry报错

sentry_flutter 7.11.0 报错 3 errors in SentryCrashMonitor_CPPException with the errors No type named terminate_handler in namespace std (line 60) and No member named set_terminate in namespace std 替换sentry_flutter版本为&#xff1a; 8.3.0 从而保证oc的…...

windows在命令行中切换盘符

一、问题描述 我们在使用windows的cmd&#xff08;命令行&#xff09;时&#xff0c;经常需要用cd命令在不同盘之间切换路径。但有时在不同盘之间切换时&#xff0c;会发现命令不起作用。 如下图所示&#xff0c;直接切换目录还是停留在原来的位置。 二、解决方法 首先切换盘符…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效&#xff0c;稳定&#xff0c;易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...

API网关Kong的鉴权与限流:高并发场景下的核心实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中&#xff0c;API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关&#xff0c;Kong凭借其插件化架构…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心&#xff0c;直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法&#xff0c;涵盖基础规则、优化算法和容错机制&#xff1a; 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则&#xff1a; 大尺寸/重量积木在下&#xf…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL

ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...

ui框架-文件列表展示

ui框架-文件列表展示 介绍 UI框架的文件列表展示组件&#xff0c;可以展示文件夹&#xff0c;支持列表展示和图标展示模式。组件提供了丰富的功能和可配置选项&#xff0c;适用于文件管理、文件上传等场景。 功能特性 支持列表模式和网格模式的切换展示支持文件和文件夹的层…...

用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章

用 Rust 重写 Linux 内核模块实战&#xff1a;迈向安全内核的新篇章 ​​摘要&#xff1a;​​ 操作系统内核的安全性、稳定性至关重要。传统 Linux 内核模块开发长期依赖于 C 语言&#xff0c;受限于 C 语言本身的内存安全和并发安全问题&#xff0c;开发复杂模块极易引入难以…...