目前在做GD32替代STM32作为主控的各种飞行器研究,欢迎感兴趣的朋友联系我。

神经网络训练优化器及工具

前言:在上一篇ResNet实战博客中,笔者采用的都是最简单的激活函数和梯度下降训练算法,并且在训练到瓶颈期还需要手动停止训练并调整学习率。所以在本篇中我们将讨论训练优化算法和一些自动训练工具。

Basic:随机梯度下降

SGD:Stochastic gradient descent

这部分属于入门知识,可以看吴恩达老师的课程,讲得非常通俗易懂。

梯度下降

我们的模型(神经网络)本质上是一组不断调整参数的函数组合而成一个我们想要的复杂函数。而根据微积分和高维空间的知识我们知道,任何函数都存在导数(或Jacobian矩阵)并且都存在凹凸特性。而神经网络的训练就是基于这一点,通过人工设计一个目标损失函数,然后以最小化(或最大化)该函数为目标,不断计算输入数据在该损失上的梯度,并不断迭代寻找到函数最低点(上图)。我们将模型和目标损失函数表示为:

$$
\text{网络模型:}\hat{Y} = F(X)
\\
\text{损失函数:}L(\hat{Y},Y)|_{w,b}
$$

SGD训练参数过程:

$$
w := w-\alpha\cdot \frac{\partial L}{\partial w}
\\
b := b-\alpha\cdot \frac{\partial L}{\partial b}
$$

阅读更多...

Pytorch实现ResNet18

前言:ResNet是计算机视觉做人工智能分类的有力工具,也是后续深度学习开发超深网络的基础。笔者使用了一周的时间从全连接网络学习到了CNN及ResNet,并且使用pytorch手写了一版ResNet18对CIFAR-10数据集的识别,将在本篇中记录学习的心得。

What’s ResNet

首先引用一张图来说明为什么会诞生ResNet及其用处

Why

图片摘自发明该技术的何凯明原论文

正如上图中左部分,普通的神经网络当深度加深时,在同一数据集上训练的效果变差;但是从直觉和理论的角度来说,当网络加深时,对复杂特征函数的表达将更好,起码不能变差。

造成该现象的原因是,神经网络是基于梯度训练的,存在着梯度爆炸梯度消失问题,而深度网络越深则反向传播时深层获得的梯度激励更小,就越难训练,也就是说训练效果变差。

而采用ResNet后,如上图中右部分,深度网络变得如我们预期的那样——更深的网络带来更好的效果。那么这是怎么回事呢?下图是组成ResNet的基本元件,叫做Residual Unit(残差单元)

ResUnit

精髓就是右边的那一根短路线,简单的理解就是对这个部分求导会得到一个(1+dF),所以梯度传播到了深层最起码也有个1在,减小了梯度消失出现的概率。看这个块可能还有点愣,那么看一下具体实现的ResNet吧!

阅读更多...

光电对管模拟信号检测

前言:上个月做电赛培训,做到了轨迹检测,但是笔者发现现在市面上有售的光电对管模块都是调阈值输出逻辑量,而且会被环境光影响。所以在老师的指导下,设计了一款脉冲调制的可检测面反射参数的模拟量模块,不仅可用来测量灰度还可以用来测距,在本文中将分享这款模块的电路设计和原理分析。

What’s 光电对管

本文中使用的是ST188型号光电管,所以也将以该器件的技术手册作为介绍展开。

ST188

上图是截取自手册上的器件图,可见光电对管内部,就是一个发光二极管和光电接收管。只不过不是可见光,而是特定频率的红外光。当发射出去的光,经过反射回到光电管时,将会激发一定的光电流,正如下图所示,是在反射面参数不变的情况下,光电流相对距离的变化特性曲线。

阅读更多...
  • Copyrights © 2022-2023 RY.J
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信