- 博客(230)
- 资源 (1)
- 收藏
- 关注
原创 深度学习之基于paddle的多机训练资源配置
实际应用时,常会遇到更加复杂的机器学习或深度学习任务,需要运算速度更高的硬件(如GPU、NPU),甚至同时使用多个机器共同训练一个任务(多卡训练和多机训练)
2025-11-24 17:35:39
107
原创 手写数字识别 -- 优化评估函数和梯度算法
在手写数字识别任务中,仅改动三行代码,就可以将在现有模型的损失函数替换成交叉熵(Cross_entropy)。在读取数据部分,将标签的类型设置成int,体现它是一个标签而不是实数值(飞桨框架默认将标签处理成int64)。上面调整了评估函数从均方误差调整为交叉熵,接下来再调整梯度算法。在网络定义部分,将输出层改成“输出十个标签的概率”的模式。在训练过程部分,将损失函数从均方误差换成交叉熵。理论上adam是最优的,实际中可以都尝试下。
2025-11-21 14:29:26
175
原创 深度学习实践 - 使用卷积神经网络的手写数字识别
输入数据维度[N,Cin,Hin,Win],输出数据维度[N,out_channels,Hout,Wout],权重参数w的维度[out_channels,Cin,filter_size_h,filter_size_w],偏置参数b的维度是[out_channels]。类似的,也有Conv3D可以用于处理视频数据(图像的序列)。使用简单的单层神经网络(线性回归)来做手写数字识别效果并不好,图片是二维的,我们将特征都展平成一维了,按咱们的优化路线,从网络层面进行调整,使用多层神经网络,并且尝试加入卷积层。
2025-11-20 15:51:59
505
1
原创 卷积神经网络-CNN
3大小的filter,这些filter里面的参数,在卷积神经网络中,是学习出来的,filter大小是我们认为指定的,它的大小标识着我们认为一个特征可以用该大小的filter给抓取出来。也可以把某一个神经元单独拎出来,用不同的图片作为输入,看它对哪个图片activate最强烈,该nuero大概率就是做该方面的相关的处理。卷积层考虑了有些特征子图比整个图片小的场景以及相同特征会出现在不同区域的场景,max pooling考虑了降采样不会改变结构的场景。6大小的图片以及一堆自定义的3。
2025-11-20 09:18:39
207
原创 深度学习实践--手写数字识别(1)-模型训练的基本框架案例
我们的案例基于paddle飞桨框架,附飞桨api查询链接:https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/nn/Linear_cn.html#cn-api-paddle-nn-linear。接下来我们集于飞桨的接口,来实现我们的网络,我们直接继承paddle.nn.Layer以便复用框架的参数管理,基础功能等,而不用自己再去手动实现,只需要关注网络结构,这与李宏毅老师的课程里面keras的案例课也是类似的。
2025-11-17 21:14:48
670
原创 DNN的训练建议 -- 学习率篇
在标准的 SGD 或 Mini-batch SGD 中,我们为所有参数设置一个全局学习率。RMSprop 是一种用于训练神经网络的自适应学习率优化算法。您可以把它理解为 SGD 的一个智能升级版本,它主要解决了 SGD 及其变体在训练过程中学习率难以设定的问题。Momentum是一种通过填加一个惯性值,来让梯度趋近于0的时候,仍然继续往前走的方案。RMSprop 使用了一种“移动平均”的方法来调整每个参数的学习率。RMSprop 的核心思想就是:为每个参数自动计算一个独立的自适应学习率。
2025-11-14 15:08:39
288
原创 backpropagation(反向传播原理)
结合整个神经网络,下图中圆圈参数为w,那么输出z对w的偏微分很直观的就等于输入值,比如0.12处对w=1的偏微分是-1,对w=-1的偏微分是1。总的Loss是每一条链路的loss之和,那么总的Loss对参数的偏微分等于每一条链路对参数的偏微分之和。这个式子就可以看作是一个反向的神经元,它的输入输出如下图,激活函数是。是最后一层,那么根据输出y1,y2可以求得。直到最后一层的结果,再用于前面的计算。反向计算比正向计算会简单很多。
2025-11-13 09:59:30
173
原创 deep learning简介
这里的梯度集合就是对所有参数分别做偏微分的集合,由于涉及到大量微分计算,反向传播是一种有效的计算微分的方式,现在有很多工具,像tensorflow,pytorch等,可以用来计算微分。可以使用不同的方法来连接这些神经元,从而得到不同结构的神经网络,而所有的logic regression的w,b参数的合集,就是这个神经网络的参数。把输入层到输出层之间的隐藏层看作一个整体,他们在里面做的是特征变换的工作,相当于把输入特征经过一系列变换,最终得到一组特征用来给输出层用。(3)寻找最好的模型;
2025-11-11 13:58:06
1080
原创 机器学习数学知识温习(2)- 高斯-正态分布
fx12πσe−x−μ22σ2fx2πσ1e−2σ2x−μ2,其中μ\muμ就是均值,σ\sigmaσ就是方差,则称随机变量x服从参数μ\muμσ2\sigma^2σ2的正态分布,记作X~N(μ\muμσ2\sigma^2σ2).N为normal distribution的首字母。当μ\muμ=0,σ\sigmaσ=1时,正态分布N(0,1)称为标准正态分布。ψx12πe−x2。
2025-11-07 11:13:34
471
原创 行列式的展开
在行列式中,将元素aija_{ij}aij所在的第i行,第j列划去,得到的n-1阶行列式,称为元素aija_{ij}aij的余子式。
2025-11-05 17:34:38
382
原创 线性回归实践
注意由于我们多了一个参数,故w2初始化为3行一列的二维数组,有一个细节点是,这里的X2看着像是一个特征,实际它包含了两个特征,只是刚好计算方式还是一样的。还有一个细节,这里插入了一列全为1的值,我们的h(x)定义是不带bias的,这里实际处理上考虑了bias,这一列也就是插入bias的效果。上面需要注意的时data.iloc,首个冒号表示选取所有行,第二个选取对应的列,选取是左闭右开区间,下标从0开始。注意,下面的语句 创建一个Ridge回归模型,设置alpha值,这里的alpha就是公式里面的。
2025-11-05 14:27:25
1660
原创 梯度下降法实践
图中应该是arg minL(θ).首先假设(θ)实际上是两个变量${θ1θ2}$,随机从一个位置θ0开始,分别对θ1和θ2做偏微分,得到θ1。
2025-11-04 15:45:21
780
原创 行列式性质的计算利用与几个特殊的行列式
2.利用倍数和加于另一行值不变性质及对换性质,将行列式变成上三角或下三角行列式。思路1:利用对换,转换成上三角(下三角行列式)
2025-11-01 15:14:14
193
原创 行列式的性质(1)
4.若行列式的某一行(列)又公因子k,k可以提到行列式前面。用k乘行列式,等于用k乘行列式的某一行(列)3.若行列式又两行/两列完全相同,则行列式等于0。因为这两行对换后D=-D,所以D=0。1.行列式的行/列互换,值不变。互换后叫行列式的转秩。5.若行列式中某一行元素都是0,则该行列式为0。6.若行列式两行或两列成比例,则行列式等于0。2.交换行列式的两行/两列,行列式变号。因为相当于对换,每个单项都进行了对换。
2025-11-01 14:45:08
443
原创 n阶行列式
(2)对a2i,因为a11已经取在第一列(第一个数已经固定了),所以这行真正有效的数据只有a22。这里比较细节的利用了乘法交换率,因为只有成自然排列才能判断展开式前面带负号还是正号。(1)对a1i,因为i>1时都为0,所以i>1时的所有求和都是0。上三角行列式从ann反推,得到的结果和下三角是一样的。(3)最终得到行下标自然排列逆序数0,所以是正的。
2025-10-31 11:39:54
162
原创 全排列,排列的逆序数与奇偶性
这里巧妙地利用了兑换能改变排列奇偶性的性质,对奇排列进行一个对换,兑换后变成偶排列,此偶排列必定属于总的偶排列集合,同理对偶排列进行对换后也必定属于奇排列的集合,且变换前后都是全部的奇偶排列集合,所以各占一半。因为奇排列逆序数是奇数,每次对换改变奇偶性,所以要从奇到偶必须是奇数次。也就是说前面的数和后面所有比它小的数都能组成逆序数。
2025-10-31 10:54:04
133
原创 梯度下降方案
一个比较好的方法就是根据当前点的斜率来确定下一个点,也就是L对w做微分,斜率越大,那说明我离最小值越远,此时应该增加w0与w1之间的步长,反之则减小。在李宏毅老师讲述的线性回归模型中,讲到了梯度下降的理论,原理很简单,首先我们假设损失函数只跟w的取值相关,要找到一个w*使得L(w)最小。对于两个参数的L(w,b)来说也是类似的做法,只不过要分别对w和b做偏微分。对w做偏微分找下一个w应该所处的位置,对b做偏微分找下一个b应该所处的位置,得到新的。的值作为w1,为了再多一层控制,添加一个常数。
2025-10-30 16:49:22
366
原创 基于orin agx 启动分析
uefi/bios固件加载boot程序–>读取boot配置(grub.cfg或extlinux.cfg等)–>根据配置里和面指定的内核和initrd程序,加载对应的内核和initrd程序–>内核执行initrd里面的init进程,加载必须的驱动,挂载真正的文件系统等。会帮我们把所有步骤都做了,如果是升级的时候要独立升级bootloader或内核或文件系统,对于esp,则多分区刷写,对于内核,如果使用多分区,也刷写冗余分区切换即可,如果与文件系统在一块,则根据文件系统刷写即可。initrd 的工作流程。
2025-10-29 11:54:06
1163
原创 Nand flash和norflash对比
如果数据表里明确写着 NAND Flash 或者描述为 eMMC, UFS, SSD,那它就是 NAND。如果数据表里写着 NOR Flash 或者 Serial Flash,那它就是 NOR。简单记录下nand flash和norflash。
2025-10-28 10:05:14
227
原创 基于nvdia orin AGX AB分区切换方案
前面有篇文章我们讲了怎么刷写nvme外部设备AB分区,刷完之后默认从挂载A分区为根文件系统,如果想要切换到B分区,需要修改/boot/extlinux/extlinux.conf,通过sudo blkid nvme0n1p2查看未挂载的B分区part uuid(或者是id),将其替换extlinux.conf中对应的nvme0n1p1的part uuid/uuid即可。
2025-10-27 17:24:33
136
原创 基于nvidia orin agx 64GB刷写外部nvme设备双分区的方案
同时要配置flash_l4t_nvme_rootfs_ab.xml里面的EXT_NUM_SECTORS为一个有效范围。分区大小在p3701.conf.common里面rootfssize值配置,为总大小,ab双分区会将各分区设置为一半值。
2025-10-27 16:24:19
362
原创 Ubuntu无法开机Failed to activate swap /swapfile
最近一次强关机,导致开机进不了桌面,启动时报上面的错,并且recover模式都进不了,最终排查解决是因为文件系统的写权限莫名其妙的没了,只有可读权限。我的是ubuntu20的系统,最终修复步骤进入boot,选择指定的recovery内核,此时直接选resume是进入不了恢复模式的,先进到grub或root命令行,执行sudo mount -o remount,rw / 重新挂载根目录,此时应该可以通过resume进入恢复模式。
2025-10-27 16:13:48
219
原创 配置gerrit反向代理报错
这个错误表明Nginx进程没有权限访问/home/lzs/gerrit/etc/gerrit.passwd文件。这通常是由于文件或目录的权限设置不正确,或者Nginx进程运行的用户没有足够的权限。
2025-10-17 15:06:51
219
原创 ros2高级篇--组件使用
目录结构• ROS 1 - 节点与节点件• ROS 2 - 统一API• 组件容器• 编写组件• 使用组件• 实际应用。
2025-10-13 16:02:40
169
原创 基于nvidia orin agx进行板间文件系统迁移拷贝
首先需要下载完整的指定jetpack包,如果里面rootfs为空的话可以先制作一个案例rootfs或者直接用sdkmanager刷写一遍,得到一个基础版的rootfs。然后将源板上的/opt,/bin,/home,/sbin,/var,/etc/,/lib,/usr这几个目录拷贝到jetpack下面的rootfs目录。官方提供的app分区拷贝的方式,只能用于原板子的数据克隆备份,用于另外一块板子会报错,这里选择手动拷贝文件系统的方式进行克隆备份。修改etc/fstab,把uuid的相关行都删掉。
2025-09-28 10:02:51
246
原创 基于orin系列的刷写支持笔记
关于外部存储设备分区布局调整的详细信息,请参阅《烧录至外部存储设备》(https://docs.nvidia.com/jetson/archives/r38.2/DeveloperGuide/SD/FlashingSupport.html#flashing-to-an-external-storage-device)。Jetson Linux支持的外部存储设备是在Linux文件系统中显示为SCSI设备(设备名/dev/sd)和NVMe设备(/dev/nvmen*)的设备。您还可以指定作为APP分区的大小。
2025-08-29 09:55:17
1104
原创 shell间接引用
创建一个间接引用,用于获取数组的所有元素。命令解析分解理解:实际示例bashdeclare -a BOARD_A_SPECS=(“cpu:arm” “ram:2GB” “storage:16GB”)declare -a BOARD_B_SPECS=(“cpu:x86” “ram:4GB” “storage:32GB”)BOARD_SPECS_ARRAY=“BOARD_A_SPECS”board_specs=“${!BOARD_SPECS_ARRAY}[@]”echo “所有规格: ${!board
2025-08-20 21:00:35
343
原创 git submodule的位置更新调整方法
假设我现在的gitsumodule配置是这样。步骤 3:更新 .gitmodules 文件。我想给它调整导src目录下应该怎么做。步骤 2:重新添加子模块到新路径。步骤 1:删除原有子模块。
2025-08-15 10:19:24
343
原创 获取当前脚本所在的绝对路径,并将其父目录路径保存到变量 curdir 中
获取当前脚本所在的绝对路径,并将其父目录路径保存到变量 curdir 中。
2025-08-08 15:57:59
455
原创 opencv 阈值分割函数
THRESH_BINARY 或 THRESH_BINARY_INV,会将大于thresh的像素值设置为maxval,其余设置为0(二值化)
2025-08-05 14:13:10
3296
2
原创 结合opencv解释图像处理中的结构元素(Structuring Element)
结构元素是数学形态学(Mathematical Morphology)中的核心概念,用于定义图像处理中腐蚀(Erosion)、膨胀(Dilation)、开运算(Opening)、闭运算(Closing)等形态学操作的邻域规则。它本质上是一个小型矩阵(或二维形状),通过在图像上滑动并相互作用来实现特定的像素变换效果。
2025-08-05 13:46:43
1200
原创 图像处理中的锚点含义
元素内锚点位置是图像处理中形态学运算(如腐蚀/膨胀)的一个重要概念,具体指结构元素(Structuring Element)上的一个基准点。它的作用类似于"操作手柄",决定了结构元素与图像对齐时的参考位置。建议通过OpenCV的getStructuringElement()函数配合不同锚点值实验,观察处理效果差异。如果将锚点改为(0,0)(左上角),膨胀操作会使目标像素向右下方扩展。直观理解(以5×5矩形结构元素为例)
2025-08-05 10:34:45
325
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅