1.手写数字识别训练
2.paddle掌握(一)paddle安装和入门
3.Keras 中的码下 Adam 优化器(Optimizer)算法+源码研究
4.NVIDIA Jetson Nano使用指南
5.Pytorch笔记(十四:继承nn.Module定义MLP,GPU加速&Visdom)(1.1版本)
手写数字识别训练
在《模式识别与图像分析》课程的二次作业中,我运用PyTorch框架构建了一个手写数字识别网络,码下以经典MNIST数据集作为训练和测试对象。码下MNIST,码下作为机器学习领域常用的码下数据集,包含约7万张x像素的码下中间页源码手写数字,每个数字对应一个one-hot标签,码下用于评估算法的码下识别能力。其数据处理方式是码下将转换为维的一维向量,输入到神经网络中。码下
神经网络的码下构建基于输入向量逐步通过多层节点,其中每个节点通过前一层的码下权重计算得出。最后一层为个节点的码下输出层,通过softmax函数将概率分配给每个数字。码下训练过程的码下目标是寻找合适的网络参数,以最大化识别准确率。具体步骤包括安装所需库,定义Net类,导入数据,评估识别正确率,以及在主函数中进行训练和测试。组合源码
在训练过程中,我们从测试集中逐批获取数据,通过网络预测结果后与实际标签对比,累加正确预测的数量,从而得到预测准确率。最终的训练结果显示了模型的识别性能,包括预测准确率和测试结果。源代码的详细内容展示了这一全过程。
paddle掌握(一)paddle安装和入门
首先,我们从安装PaddlePaddle开始。官方推荐有深度学习开发经验且注重源代码和安全性的开发者使用,确保你的本地环境已安装CUDA和Anaconda。为了安装CUDA,你需要:1. 下载CUDA .7,可以从CUDA Toolkit Archive获取。
2. 打开命令窗口,通过win+R运行管理器,输入`cmd`。
3. 通过命令行查看CUDA版本。
安装PaddlePaddle后,rollup 源码我们来实现一个经典的深度学习入门项目——MNIST手写字符识别,这就像软件开发的“hello world”项目。LeNet模型将用于对MNIST数据集进行图像分类。MNIST数据集包含,个训练样本和,个测试样本,数据预处理已标准化,每张是x像素,值在0到1之间。获取数据集地址:yann.lecun.com/exdb/mnist。 利用PaddlePaddle的`paddle.vision.datasets.MNIST`,我们可以加载数据并查看训练集中的一条数据,如`train_data0`的标签为[5]。 接着,我们构建LeNet模型,使用`paddle.nn`中的函数如`Conv2D`、`MaxPool2D`和`Linear`。以下是模型构建的输出。 模型训练和预测可以通过高层API实现,如`Model.fit`进行训练,`Model.evaluate`进行预测。基础API下,小山源码你需要构建训练数据加载器,定义训练函数,设置损失函数,按批处理数据,进行训练,并在训练后用测试数据验证模型效果。Keras 中的 Adam 优化器(Optimizer)算法+源码研究
在深度学习训练中,Adam优化器是一个不可或缺的组件。它作为模型学习的指导教练,通过调整权值以最小化代价函数。在Keras中,Adam的使用如keras/examples/mnist_acgan.py所示,特别是在生成对抗网络(GAN)的实现中。其核心参数如学习率(lr)和动量参数(beta_1和beta_2)在代码中明确设置,参考文献1提供了常用数值。
优化器的本质是帮助模型沿着梯度下降的方向调整权值,Adam凭借其简单、高效和低内存消耗的特点,特别适合非平稳目标函数。它的分块源码更新规则涉及到一阶(偏斜)和二阶矩估计,以及一个很小的数值(epsilon)以避免除以零的情况。在Keras源码中,Adam类的实现展示了这些细节,包括学习率的动态调整以及权值更新的计算过程。
Adam算法的一个变种,Adamax,通过替换二阶矩估计为无穷阶矩,提供了额外的优化选项。对于想要深入了解的人,可以参考文献2进行进一步研究。通过理解这些优化算法,我们能更好地掌握深度学习模型的训练过程,从而提升模型性能。
NVIDIA Jetson Nano使用指南
本文旨在提供NVIDIA Jetson Nano的使用指南,分享个人在端侧机器学习系统课程助教和PRP相关研究项目中的经验。如有疑问,欢迎在评论区留言。先前也撰写过关于树莓派的经验帖,欢迎关注。
Jetson系列专注于边缘端AI平台,自年发布Pascal架构的TX2子系列,至年推出Ampere架构的Orin子系列,涵盖Nano、TX2/NX、AGX等型号,满足入门级、主流级和自主机器市场的需求。Nano是尺寸最小、性能最弱、价格最低的型号。
Jetson开发板一般包含核心板和载板两层。核心板集成了Tegra架构SoC、CPU、GPU、内存和视频编解码器等,带有eMMC闪存。载板提供额外的外设接口,如HDMI、网口、USB等。Nano型号的官方载板和国产载板在布局上基本一致。
硬件准备包括:Nano开发板、无线网卡(推荐高级套件,避免干扰)、数据线(Micro-USB和DC接口)、电源(推荐5V3A或更高,避免使用过长电源线)、外壳(保护电路避免意外损坏)。注意Micro-USB和Mini-USB的区别。
固件刷写包括BootLoader和Linux内核。使用VMWare加载虚拟机,确保硬件资源设置为1个CPU和1个线程,通过短接控制引脚和Micro-USB连接实现硬件与虚拟机的连接,然后进入/home/linux_for_Tegra文件夹,运行终端命令,输入密码nvidia完成刷写。
系统烧录需要使用balenaEtcher工具,选择TF卡作为目标,加载并执行烧录过程。此过程中使用的系统镜像包含了Jetpack4.6.1和CUDA.2,适用于Nano。
分区扩容可通过GParted工具实现,更新apt源为清华源以优化网络体验,安装GParted并扩展主分区至TF卡最大容量。
配置风扇自启动,编辑自启动脚本以实现开机时风扇启动,确保系统散热。
SSH远程登录配置包括静态IP地址设置和免密登录,以支持远程访问Nano系统。
深度学习环境配置涉及PyTorch和torchvision的安装,需要在官网下载预编译的whl文件或从源码编译安装,确保兼容aarch架构。
VSCode远程开发环境配置包括安装Remote Development插件,设置远程连接,通过SSH终端连接Nano系统进行编程。
通过MNIST神经网络时延测试,评估Nano在端侧机器学习应用中的性能,包括硬件限制和资源消耗,提供直观的速度对比。
Pytorch笔记(十四:继承nn.Module定义MLP,GPU加速&Visdom)(1.1版本)
PyTorch笔记(十四:深度学习实践与优化) 1. 模块化网络构建在上一节中,我们手动构建了用于MNIST分类的简单网络,网络参数需自行管理。在深度学习框架中,推荐使用nn.Module继承来构建网络,这样可以隐藏参数细节,自动处理初始化问题,使网络设计更加简洁。
2. ReLU与F.relu的区分PyTorch提供了两种API风格:nn.ReLU作为类,位于torch.nn模块,以大写字母开头;F.relu作为函数,存于torch.nn.functional模块,全小写字母。理解这两种形式的区别有助于高效使用库功能。
3. GPU加速通过torch.device()函数选择GPU设备,然后在定义的网络或Tensor后面添加.to(device)即可实现数据在GPU上的运行。例如,训练和损失计算时,确保数据在GPU上进行。
4. Visdom可视化与tensorboardX相比,Visdom在可视化上更直观,尤其对图像数据支持直接使用Tensor。安装Visdom可通过pip install或从源码编译。运行visdom.server进行测试,以便实时监控训练和测试过程。
5. 训练过程可视化在自定义网络代码中加入Visdom的可视化,导入Visdom库并在训练过程中实时绘制训练曲线和验证结果,通过设置窗口和更新模式动态展示数据变化。
6. 正则化技术正则化如L2或L1,用于防止过拟合。在训练时,L2正则化通过设置optimizer的weight_decay参数实现,而L1正则化需在loss计算前手动添加。注意,L1正则化可能需要更小的系数以避免under-fitting。