- 博客(182)
- 资源 (8)
- 问答 (2)
- 收藏
- 关注
原创 机器学习详解(18):随机森林原理及代码实现
随机森林通过组合多棵决策树来进行预测。森林中的每棵树都在数据的一个随机子样本上进行训练,并在每次划分节点时只考虑部分随机选取的特征。每棵树就像一个“专家”,独立做出分类判断。最终结果通过多数投票决定哪一类为最终预测(如果是回归任务,则取所有树预测值的平均)。如下图所示,有一组由n棵树组成的森林,我们看前5棵,其中4棵判断为“猫”,1棵判断为“狗”,那最终结果就是“猫”。每棵树走的判断路径可能不同,因此预测也各有差异。Bootstrap抽样。
2025-04-03 07:00:00
712
原创 机器学习详解(17):决策树原理及代码实现
决策树是一种灵活且可解释的监督学习算法,是许多经典机器学习算法(如随机森林、Bagging 和梯度提升决策树)的基础算法,核心思想是将数据表示为一棵树:根节点:包含初始的决策规则,例如“是否运动”内部节点:表示针对某个属性进行判断的条件测试分支:根据条件分裂出后续的决策路径叶节点(终端节点):表示分类标签或预测值分裂:将节点分成多个子节点的过程,基于特定条件或规则剪枝:与分裂相反的过程,通过移除不必要的决策规则简化树的结构,从而降低算法的复杂性并提高泛化能力。
2025-04-01 07:00:00
659
原创 CANopen和CAN学习(4):CANopen规范之EDS、DCF和SDO访问对象字典
EDS()和DCF()文件格式在 CANopen 中用于描述特定节点中实现的对象字典。为了向CANopen分析软件(上位机)提供一种识别 CANopen 节点中可用对象字典条目的方法,需要一种电子可读的文件格式。CANopen 规范了这种格式,称为电子数据表 (EDS)。EDS 是对象字典规范的电子可读版本。接着我们将探讨一下SDO访问对象字典的相关知识和注意事项。
2025-02-27 07:00:00
1103
原创 CANopen和CAN学习(3):CANopen规范之对象字典详解
定义对象字典就像表格,包含所有网络可访问的数据。每个CANopen节点都必须实现自己的对象字典对象字典描述了节点的CANopen配置和功能,可以被其他CANopen节点读取和写入用途对象字典不仅存储节点的应用特定信息,还可以被网络上的其他节点使用通过向节点的对象字典条目写入数据(有时通过读取数据),可以指示节点执行某种操作例如采样当前温度,并将采样数据存储在对象字典中以供其他节点读取信息获取通过读取节点的对象字典条目,其他节点可以了解该节点的功能和操作方式。
2025-02-26 07:00:00
1085
原创 CANopen和CAN学习(2):CANopen基础之对象字典、设备配置文件、EDS、SDO、PDO和网络管理
上一节,我们了解了CANopen和CAN学习(1):嵌入式网络通用术语,本节,我们将介绍CANopen协议的主要功能,以及它如何满足嵌入式网络的要求。任何 CANopen 节点的核心是对象字典(,),它是一个由 位索引和 位子索引组成的查找表。这允许在每个索引下最多有 个子条目,每个条目可以包含一个任意类型和长度的变量。对象字典不仅提供了一种将变量与索引和子索引值关联的方法,还指定了数据类型定义表。从索引1开始的条目专门用于指定数据类型。下表显示了对象字典中定义的一些常用数据类型的前七个条目。通过这种
2025-02-25 07:00:00
1608
原创 CANopen和CAN学习(1):嵌入式网络通用术语
从本篇开始,我将深入学习CANopen和CAN相关知识。但在这之前,本篇文章先来了解一下嵌入式网络相关的通用术语。
2025-02-24 07:00:00
943
原创 机器学习详解(16):迁移学习及代码实例
上一篇文章中,我们用预训练的 ImageNet 模型来识别所有的狗。然而,这次我们希望创建一个只允许特定狗进入的宠物门。以一只名为 Bo 的狗为例,我们有 Bo 的 30 张照片,但预训练模型并未专门训练过这只狗。如果直接用这 30 张照片从头训练模型,会导致过拟合。通过迁移学习,我们可以利用预训练模型中识别狗的能力,在小数据集上实现对 Bo 的识别。本篇文章的目标准备一个预训练模型以进行迁移学习。使用自己的小型数据集对预训练模型进行迁移学习。进一步微调模型以提升性能。
2025-02-13 07:00:00
616
原创 机器学习详解(15):使用预训练模型VGG16识别动物
使用 TorchVision 加载一个训练良好的预训练模型。预处理图像以符合预训练模型的输入要求。使用预训练模型对自己的图像进行准确的推理。我们将创建一个宠物门,只允许狗进入,但将猫等其他动物留在外面。如果通过手动训练模型实现该功能,需要一个包含多种动物的大型数据集。不过,我们可以直接使用已有的预训练模型实现,VGG 模型(如 VGG16 和 VGG19)最初是在 ImageNet 数据集上的 ILSVRC 挑战中提出,并使用该数据集进行了预训练。
2025-02-11 07:00:00
1029
原创 机器学习详解(14):模型的保存和部署实例
通过保存模型,可以将训练成果持久化,避免重复训练节省时间和计算资源。加载模型则使得我们能够方便地在不同环境中复用模型,如本地测试、云端部署或边缘设备运行。此外,保存和加载还便于团队协作和版本管理,确保模型的可追溯性和持续优化能力。这些优势使模型的应用更高效、更灵活。
2025-02-10 07:00:00
1076
原创 机器学习详解(13):CNN图像数据增强(解决过拟合问题)
flattened_img_size = 75 * 3 * 3 # 扁平化后图像的大小# 构建Sequential模型MyConvBlock(IMG_CHS, 25, 0), # 输入:1x28x28,输出:25x14x14MyConvBlock(25, 50, 0.2), # 输出:50x7x7MyConvBlock(50, 75, 0), # 输出:75x3x3nn.Flatten(), # 扁平化nn.Linear(flattened_img_size, 512), # 全连接层。
2024-12-31 07:00:00
1182
1
原创 机器学习详解(12):正则化和标准化
未知或非高斯分布当数据分布未知或不符合正态分布时(例如,房价分布通常有很高的偏态)。归一化可以让目标变量误差更均匀分布,提升模型性能。基于距离的算法在使用依赖距离的机器学习算法时(如 k-近邻算法),归一化能防止大尺度特征主导距离计算。归一化的目标正则化目标变量,使误差分布更加平滑;确保输入变量的不同尺度不会互相干扰,避免模型对大值特征的偏倚。通过正确应用归一化,特征缩放不仅能让模型训练更高效,还能使结果更具解释性。与归一化将特征缩放到特定范围不同,标准化通过将数据调整为均值为000。
2024-12-30 07:00:00
923
原创 机器学习详解(11):分类任务的模型评估标准
过拟合和欠拟合是导致机器学习算法性能不佳的两个主要原因。过拟合:模型在训练数据上表现得非常好,但对新数据泛化能力很差。模型过于复杂,捕捉了数据中的噪声和无关信息,而非真正的规律。欠拟合:模型过于简单,未能从训练数据中学习到充分的模式和规律,导致训练集和测试集上的性能都很差。特性过拟合欠拟合模型复杂度过高过低训练集性能极好较差测试集性能较差较差原因学习了数据中的噪声和细节未能充分学习数据中的规律解决方法简化模型、正则化、增加数据量、早停。
2024-12-27 07:00:00
1272
原创 机器学习详解(10):优化器optimizer总结
优化器通过调整模型参数来最小化损失函数,从而提高模型的预测能力。它使用损失函数的梯度来确定参数更新的方向,并通过反向传播计算每个模型参数的梯度,进而更新模型的权重。优化算法通过迭代调整参数,直到损失函数达到最小值或达到允许的最大迭代次数为止。学习率的选择是关键,过低的学习率会导致收敛速度缓慢,而过高的学习率可能导致训练不稳定或无法收敛。方法适用场景梯度下降法小型数据集,目标函数平滑、凸优化问题。适用于批量更新参数的场景,计算梯度需要全数据集。随机梯度下降。
2024-12-26 07:00:00
1484
原创 机器学习详解(9):损失函数总结
损失函数使用场景公式特点适用场景特点均方误差(MSE)用于回归任务,衡量预测值与实际值之间的平方差,例如预测房价、温度等连续变量。对较大的误差赋予更高权重,因此对异常值敏感,适合需要精确预测的任务。当异常值较少时表现较好,优化时梯度平滑,适合基于梯度的优化算法。平均绝对误差(MAE)用于回归任务,与 MSE 类似,但更加关注绝对误差,例如用在受异常值影响较大的数据集上,如交通流量预测。对所有误差赋予相同权重,因此对异常值鲁棒,但绝对值函数在 0 点不可微,优化梯度不平滑。
2024-12-19 07:00:00
718
原创 机器学习详解(8):激活函数总结
激活函数是神经网络的核心部分,使其能够捕获数据中的非线性关系。从经典的Sigmoid和Tanh到现代变体如ReLU和Swish,每种激活函数在不同类型的神经网络中都有其特定的用途。理解它们的行为并根据模型需求选择合适的激活函数是关键。
2024-12-18 07:00:00
697
原创 机器学习详解(7):卷积神经网络CNN之手语识别代码详解
本文通过构建卷积神经网络(CNN)实现了对 ASL 手语字母的分类任务,从数据预处理到模型设计,再到训练和验证,完整地展示了深度学习在计算机视觉领域的强大能力。通过使用 Batch Normalization 和 Dropout 等技术,我们在一定程度上缓解了过拟合问题,同时采用了优化器和损失函数的合理搭配来提升模型性能。然而,训练出一个完美的模型需要不断的调参、对数据和结果的深入分析,以及丰富的实践经验。正如在最后的结果分析中,我们发现验证损失的波动需要进一步优化。
2024-12-17 07:00:00
749
原创 机器学习详解(6):卷积神经网络CNN之理论学习
卷积神经网络(CNN)是一种前馈神经网络,用于通过处理具有网格状拓扑结构的数据来分析视觉图像,也称为ConvNet。CNN的核心任务是图像中的对象检测和分类。图像分类:将图像分为预定义类别,如猫、狗、车等。目标检测:识别图像中特定物体并定位其位置。图像分割:将图像分为不同区域,用于医学图像分析或机器人场景理解。视频分析:在动态场景中跟踪物体或检测事件,用于监控和交通管理。行业应用:包括社交媒体(人脸识别和标记)、医疗(癌症检测)、零售(视觉搜索和推荐)、汽车(车道检测和碰撞预警)等。
2024-12-16 07:00:00
1023
原创 机器学习详解(5):MLP代码详解之MNIST手写数字识别
本文详细讲解了如何使用PyTorch构建多层感知器(MLP)模型,在经典的MNIST数据集上实现手写数字分类。文章从数据加载、预处理到模型搭建、训练和验证,逐步展示了完整的深度学习项目流程,同时结合代码深入解析关键技术点,如张量操作、激活函数、损失函数和优化器。
2024-12-11 07:00:00
1423
原创 机器学习详解(4):多层感知机MLP之理论学习
尽管如今的感知机已经非常成熟,但最初它被设计为一种图像识别机器,其名称来源于人类的感知功能,如感知、识别和分析图像。感知机的核心思想是构建一种能够直接从物理环境(如光、声音、温度等)中获取输入,并对其进行处理的机器,而无需人类的干预。感知机基于神经元的计算单元,类似于之前的模型,每个神经元接收一系列输入和权重。感知机的主要特点加权和与阈值在感知机模型中,输入按照权重进行加权求和,当加权和超过预定义的阈值时,神经元会“激活”,产生输出。
2024-12-10 07:00:00
988
原创 机器学习详解(3):线性回归之代码详解
线性回归广泛应用于金融、经济学、心理学等领域,以理解和预测变量行为。例如,在金融领域,线性回归可用于研究公司股票价格与收益之间的关系,或根据过去的表现预测未来的货币价值。优点简单易懂,易于实现,系数具有可解释性。计算效率高,适合处理大数据集,非常适合实时应用。与其他算法相比,对异常值较为鲁棒。常作为更复杂模型的基线模型。历史悠久,广泛应用于各种机器学习库。缺点假设因变量与自变量之间是线性关系,若该假设不成立,模型表现可能较差。对多重共线性敏感,可能导致系数方差膨胀和预测不稳定。
2024-12-05 07:00:00
1130
原创 机器学习详解(2):线性回归之理论学习
线性回归作为机器学习中最基础的算法之一,不仅具有直观的数学意义,还能通过拟合线性模型来解决实际中的许多回归问题。例如,它可以帮助我们预测房价、销售额等连续变量,甚至还能为更复杂的算法(如正则化回归和支持向量机)提供理论基础。在本篇文章中,我们详细讨论了线性回归的基本理论、假设和常用的评估指标。理解这些内容有助于我们更好地设计和优化回归模型。下一篇文章,我们将通过代码来实现线性回归模型,进一步探讨如何应用梯度下降法训练模型并对其性能进行评估。
2024-12-03 07:00:00
2063
原创 机器学习详解(1):Python基础之Numpy和Pandas
NumPy 是用于高效数值计算的基础工具,擅长处理多维数组和矩阵运算,为数据科学提供了强大的支持。Pandas 提供了灵活的数据操作和分析功能,尤其擅长处理结构化数据,是数据清洗和分析的利器。希望大家对这两个工具有了初步认识,未来可以结合实际场景深入学习和应用。
2024-11-29 21:05:35
1270
原创 I.MX RT1170之MIPI CSI摄像头初始化和显示流程详解
与MIPI DSI一样,我们可以选择不同厂家的不同摄像头,所以就有不同的配置。另外,不同摄像头的MIPI引脚定义也不太一样。常见的引脚如下:1、CLKP 和 CLKN时钟信号:这两个引脚组成时钟差分对,用于同步数据传输。作用:提供同步信号,使得主处理器和摄像头模块能够以一致的速率传输和接收数据。2、DP0 和 DN0数据通道 0:这两个引脚组成数据差分对。作用:传输视频数据和其他相关信息。数据通道 0 是必需的,能够在高速(HS)和低功耗(LP)模式下工作。3、DP1 和 DN1数据通道 1。
2024-06-05 07:00:00
1973
6
原创 I.MX RT1170之MIPI DSI初始化和显示流程详解
MIPI DSI()是一种广泛应用于移动设备显示屏的接口标准。由MIPI联盟制定,DSI接口旨在提供高效、低功耗的显示屏数据传输解决方案。本节来就通过学习I.MX RT1170单片机中的MIPI DSI接口例程,来学习MIPI DSI的初始化流程和相关的参数。
2024-06-04 07:00:00
1878
原创 C语言实现Hash Map(3):Map代码优化
本文基于Github上给的代码进行了一些小小的优化,使其可以适配不同的数据类型,并能够初始分配一个桶的内存。但正如前面所说,代码并没有完整做完适配,如map_deinit等函数还需要小小修改一下。大家可以自行修改,或者大家还有什么优化的建议都可以在我下面的git仓库中进行提交。
2024-05-28 07:00:00
1249
原创 C语言实现Hash Map(2):Map代码实现详解
基于本篇文章,我们已经学习到了哈希map实现的基本逻辑。另外,前面我们有提到,这个代码在值声明为其它几个数据类型的情况下,根本运行不了,或者并不方便我们开发程序(有时我们希望直接传值而不是变量地址),然后还有内存分配和初始化桶数量的地方可以优化。那么下一篇文章,我们就来解决这些问题,并优化这个代码。
2024-05-22 07:00:00
3061
3
原创 C语言实现Hash Map(1):Map基础知识入门
Map是一种关联容器,它存储键值对(),通过键(key)来快速查找对应的值(value插入(Insert):将一个键值对插入Map。查找(Find):根据键查找对应的值。删除(Delete):从Map中删除一个键值对。在本篇博客中,介绍了Map的基本概念和两种主要实现方式:Hash Map和红黑树Map。我们还简要介绍了C++标准库中的std::map和。在下一篇博客中,我将深入探讨如何在C语言中实现一个简单的Hash Map。
2024-05-21 07:00:00
2825
原创 基于HTTP GET方式获取网络时间的实现
本篇博客介绍了如何在Linux下使用C语言和Socket API发起HTTP GET请求。这个示例程序可以扩展到其他类型的HTTP请求和不同的API服务。如果不想用苏宁的服务器,可以随便请求一个网站和不存在的网页,如果网站用的是nginx的话,访问不存在的网页也会返回一个nginx时间。
2024-05-15 07:00:00
3099
原创 基于NTP服务器获取网络时间的实现
NTP(网络时间协议)是一种用于使计算机时钟同步到互联网标准时间的协议。NTP服务器通常分层级(Stratum)运作,一级服务器直接与时间基准同步,而其他级别的服务器则从更高级别的服务器获取时间。通过NTP,我们可以让系统的时钟保持与标准时间的一致性。
2024-05-14 07:00:00
2539
原创 嵌入式硬件设计实例:基于STM32的流水灯原理图和PCB设计
本篇文章简单地介绍了一下嵌入式单片机的一个简单的最小系统的设计,其中涉及的知识还是很多的,如果做更复杂的PCB的话,如高频、强弱电、EMC,还有电容电阻的参数,阻值大小,容值大小等方面都需要有一些考虑。所以我是不赞成网上说的:嵌入式工程师软硬件都要会,要学很多东西。实际上,对于嵌入式软件工程师来说,硬件方面,只需要会示波器,万用表,看得懂简单的原理图就够了。具体我上面所说的这些细节,仅仅一个电容电阻的大小怎么选,又有几个人知道呢?就单单一个电源来说就有够学好几个月了,还有运放、EMC等等的知识。
2024-03-06 07:00:00
6159
原创 Linux内核学习:目录结构、配置、编译和常用Shell命令
Linux是一种开源的类Unix操作系统内核,它由LinusTorvalds在1991年创建。Linux操作系统是基于Unix设计理念的,旨在提供一个稳定、可靠、安全且高度可定制的操作环境。内核:Linux内核是操作系统的核心,负责管理系统的资源和提供基本的硬件控制。它是开源的,可以根据需要进行定制和修改。开源:Linux采用开源模型,意味着其源代码是公开可用的。这使得用户可以自由查看、修改和分发系统的源代码。多用户和多任务:Linux支持多用户环境,多个用户可以同时使用系统。
2024-02-22 07:00:00
1324
原创 U-Boot学习(7):内核启动之bootz启动zImage源码分析
在上一节中,我们分析了,最后就是进入U-Boot的命令行中执行了,如果用户没有任何操作,则经过固定延时后将执行默认的bootcmd环境变量里的指令,那这里面肯定就是启动内核了。在中,我们知道最后执行的应该是bootz指令,那本节就来看一下这个指令如何启动内核的。
2024-01-31 07:00:00
1561
原创 U-Boot学习(6):初始化之_main函数源码分析
ARM中函数使用到的全局变量,会在每个函数的最后留一段内存空间来保存使用到的变量的地址。如果我们要让重定位后的代码可以正常访问全局变量的话,我们只需要修改函数最后这段内存空间里对应的全局变量的地址,给这个地址加上重定位偏移即可。
2024-01-30 07:00:00
1815
原创 U-Boot学习(5):系统初始化之start.S文件源码分析
最后程序就跳转到_main(在中)函数执行。我们知道U-Boot最后就是执行一个命令行程序,然后可以跳转到内核执行。这正是在_main中要完成的操作。下一篇文章我们继续分析。
2024-01-25 07:00:00
1382
原创 位置无关码PIC详解:原理、动态链接库、代码重定位
本文解释了什么是位置无关代码,以及它如何帮助创建具有可共享只读文本段的共享库。位置无关代码(PIC)通过引入全局偏移表(GOT)和过程链接表(PLT)实现,解决了共享库加载时的重定位问题。GOT提供了数据和函数的间接引用,PLT实现了懒绑定,推迟函数地址的解析。当然这也伴随额外的内存加载和寄存器使用成本,但在权衡之下,现代的编译器都更倾向于使用PIC。
2024-01-23 07:00:00
4910
原创 U-Boot学习(4):u-boot.lds链接脚本分析
lds链接脚本基础与例子分析。SECTIONS {......secname和contents是必须的,前者用来命名这个段,后者用来确定代码中的什么部分放在这个段中。start:段重定位地址,也称为VMA,即运行地址。如果代码中有位置相关的指令,程序在运行时,这个段必须放在这个地址上。:虽然start指定了运行地址,但是仍可以使用BLOCK(align)来指定对齐的要求一这个对齐的地址才是真正的运行地址。(NOLOAD):用来告诉加载器,在运行时不用加载这个段。
2024-01-17 07:00:00
1990
原创 U-Boot学习(3):.config、defconfig文件对比及图形化配置Kconfig
1、在U-Boot的defconfig文件中,配置项之间存在依赖关系。当你在defconfig文件中启用或禁用某个配置项时,可能会触发相关的配置项引申或取消。在defconfig文件中,一些配置项可能有直接的依赖关系。这意味着启用或禁用一个配置项可能会导致与之直接相关的其他配置项的状态发生变化。这通常是通过配置项的名称来指定的。有些配置项可能存在间接的依赖关系。这意味着启用或禁用一个配置项可能会触发一系列的配置项状态变化,这些变化可能是由于其他配置项的依赖关系而产生的。所以在生成的.config。
2024-01-16 07:00:00
2628
原创 U-Boot学习(2):U-Boot编译和.config配置文件生成分析
上一节中,介绍了如何使用U-Boot。我们知道一个U-Boot可能要适配不同的硬件,所以不同的硬件就有不同的配置,配置后就可以编译U-Boot,最终生成镜像。U-Boot如何编译,以什么规则编译,编译后下载到内存中的哪里呢,这一切都在Makefile中。所以本节课就来分析一下U-Boot的Makefile的结构。
2024-01-11 07:00:00
3659
原创 U-Boot学习(1):简介及命令行指令详解
U-Boot是一个开源的引导加载程序,主要用于嵌入式系统和嵌入式设备。它被设计成通用的,能够在多种处理器架构上运行,如ARM、MIPS、x86等。U-Boot的主要功能是加载并启动操作系统内核,最常见的是Linux内核。当嵌入式设备上电或者复位时,处理器会从固定地址处的启动ROM(Boot ROM)中开始执行代码。启动ROM的主要任务是初始化系统的基本硬件,如时钟、内存控制器等,并加载U-Boot引导加载程序到RAM中。一旦U-Boot加载到RAM中,它就开始执行。
2024-01-10 07:00:00
3298
原创 嵌入式Linux:环境搭建之TFTP、NFS、SSH和FTP的安装和使用
NFS(网络文件系统,)是一种分布式文件系统协议,允许我们挂载远程的目录。这让我们能够管理不同位置的存储空间,多个客户端也可以更改这个空间。我们在开发的过程中,如果我们更改了Linux内核或者设备树,就需要重新将镜像烧写到NAND/SD/EMMC等设备中,然后由UBoot拷贝到RAM。这样就很麻烦,我们就可以在UBoot中利用NFS来从远程的主机(如Ubuntu)中加载内核和设备树到开发板的RAM中。
2024-01-09 07:00:00
1907
ARM Architecture Reference Manual ARMv7-A and ARMv7-R edition
2024-01-12
Avoiding Read While Write Errors When In-Software Flash
2023-11-27
AES加解密算法(Rijndael) C++代码
2023-09-03
cortex-m4f-lazy-stacking-and-context-switching.pdf
2022-12-02
Supplement to the Bluetooth Core Specification
2022-11-24
STM32 PWM的OCToggle模式输出频率和占空比动态调整的波形
2020-02-24
OpenCV提取HSV颜色范围问题
2021-06-02
C语言 指针地址相减的问题
2018-12-20
TA创建的收藏夹 TA关注的收藏夹
TA关注的人