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

2021年松山湖智能C端科创训练营

前言:今年参加了一波松山湖的xbotPark科创训练营,刷新了笔者的三观。我认为这段日子里收获的许多知识和思想都值得被记录下来,这篇博客中,将主要分享一下:

  • xbotPark买家秀😁
  • 产品定义和市场调研
  • 样机开发和项目管理
  • 创业者应该具有的思维

xbotPark买家秀

首先,刚来到这个园区就感受到一种强烈的“国家兴亡,我有责任”的感觉

园区大楼图

随处可见的标语,让你感觉来了这就要做出一番事业才能罢休

楼上的标语

来的第一天其实还挺好玩的,每个人都领了一条大红围巾以及自己的胸牌。接着大家集聚到一个教室里,创业之前要先找合伙人,所以这个阶段是让我们把所有人认识一遍。在楼上稍坐了一会儿就下楼拍大合照去了(很special噢,是第一天而不是结营。我想这也就是暗指创业者人生的不同吧——只有起点,没有终点🚀)

冬令营的我们

阅读更多...

PythonQt开发上位机实战

Qt——地表最强UI开发框架,除了常规的桌面开发还支持嵌入式系统(MCU)开发。开发语言支持性能爆炸的C++和用户体验极致的Python,本文笔者将通过实战开发一个上位机,简单地带大家入门(py)Qt,顺便玩玩py串口

安装

可以使用pip命令安装Qt和开发工具

1
2
$pip3 install PyQt5
$pip3 install pyqt5-tools

在Qt官网下载开发全家桶,包括:Qt Designer + Qt Creator + Qt Design Studio。

在python编程下我推荐使用Qt Designer设计UI,然后使用其他IDE开发业务逻辑(本文内容)。如果是C++的话,直接使用Qt Creator就很方便了

UI设计

安装好开发全家桶后,在开始菜单就可以直接找到Qt设计工具了,打开Qt Designer,跳出初始页面:

Qt Designer

选择Dialog without Buttons,接着可以随意放置你想要的交互元件,只要从左边拖过来就可以了:

放置控件

笔者开发的上位机作用是调整STM32核心板对风速和温度的控制目标值,所以设计如下的界面:使用了水平滑动条Horizontal Slider和行编辑Line Edit两种控件同时作为输入(当然,需要在业务逻辑上对两者进行同步);使用按键Push Button实现简单01逻辑;并使用下拉栏comboBox实现选择通信口子的功能。最后,我们使用栅格来组织页面,这样一个UI就搞定啦

UI设计

注意☢在右边的属性栏中需要适当得对每个控件进行名称修改,以便于后续业务逻辑开发

UI设计文件转Python文件

  1. 在Qt Designer中保存界面设计文件(.ui后缀)

  2. 接着打开命令行调节目录至保存路径

  3. 运行pyuic5命令转换:

    1
    pyuic5 Name1.ui -o Name1.py
  4. 可以打开生成的py文件,会发现一个UI界面就是被转换成了一个类(内容太长了,附在文末)

交互逻辑开发

阅读更多...

神经网络基础函数汇总

前言:该博客的内容主要是三大部分:激活函数、损失函数、评价函数。笔者主要是为了提供后面方便查阅和选择适当函数撰写,所以数学成分和工程思想成分都会相应部分得较重😘

在神经网络中,训练模型时需要计算损失函数来进行模型优化(对损失函数的梯度下降迭代来生成模型);在测试(训练后)模型时,在模型对测试集推导后得到的结果,通过计算评价函数来评估模型的效果。

激活函数及导数

  • ReLU(Rectified Linear Unit):修正线性单元

$$
ReLU(x) = \begin{cases}
x, & x>0 \\
0, & other
\end{cases}
\\
\frac{\partial ReLU(x)}{\partial x} = \begin{cases}
1, & x>0 \\
0, & other
\end{cases}
$$

  • Leeky ReLU

    在负半轴修正为一个具有非常非常小斜率的线性

$$
a(x) = \begin{cases}
x, & x>0 \\
\alpha\cdot x, & x \le 0
\end{cases}
\\
\frac{\partial a(x)}{\partial x} =\begin{cases}
1, & x>0 \\
\alpha, & x \le 0
\end{cases}
$$

  • Sigmoid
    • 将输出(映射)限制在0~1之间
    • 在函数两端带来梯度消失问题

$$
\sigma(x) = \frac{1}{1+e^{-x}}
\\
\frac{\partial \sigma(x)}{\partial x} =\sigma(x)[1-\sigma(x)]
$$

  • Softmax

    • 多分类问题中,在最后一层输出使用
    • 输出结果表示该类的概率,层的所有输出加起来为1
      $$
      y_i = S(x_i) = \frac{e^{x_i}}{\sum_{j=1}^{C}e^{x_j}}
      $$
      在反向传播时,对该式求导(过程)为:
      $$
      \frac{\partial y_i}{\partial x_k} = \begin{cases}
      \frac{ [e^{x_k}\cdot \sum_{j=i}^{C}e^{x_j} ] - [ e^{x_k} \cdot e^{x_k} ]}{[\sum_{j=1}^{C}e^{x_j}]^2}, i=k
      \\
      \frac{ - [ e^{x_i} \cdot e^{x_k} ]}{[\sum_{j=1}^{C}e^{x_j}]^2}, i \neq k
      \end{cases}
      \\ = \begin{cases}
      y_k(1-y_k), i=k
      \\
      -y_i y_k, i \neq k
      \end{cases}
      $$
      在工程实际使用中,一般采用矩阵形式运算:
      $$
      S(X) = \frac{e^{X}}{\sum e^{X}}
      $$
  • tanh

    • 将输出(映射)限制在-1~1之间
    • 在函数两端带来梯度消失问题

$$
\tanh(x) = \frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}
\\
\frac{\partial \tanh(x)}{\partial x} = 1-\tanh^2(x)
$$

  • Swish
    • Swish无上界有下界(和ReLU一样)
    • Swish是平滑且非单调(与ReLU不同)

$$
S(x) = x\cdot \sigma(x) = \frac{x}{1+e^{-x}}
\\
S’(x) = S(x)+\sigma(x)\cdot(1-S(x))
$$

  • Mish
    • 无上界,有下界
    • 非单调
    • 无穷连续性和光滑性
    • 计算量较大,但是效果好(深度网络)。YOLO中被使用

$$
M(x) = x\cdot \tanh(\ln(1+e^x))
$$

损失函数

$$
J(w,b) = \frac{1}{m}\sum^m_{i=1}L(\hat{y}^{(i)},y^{(i)})
$$

  • MSE(Mean Squared Error0L2):均方误差函数

$$
MSE = \frac{1}{m} \sum^m_{i=1} (y- \hat y)^2
$$

  • RMSE(Root Mean Square Error):均方根误差

$$
RMSE = \sqrt{\frac{1}{m} \sum^m_{i=1} (y- \hat y)^2}
$$

  • MAE(Mean Absolute Error-L1):平均绝对误差

$$
MAE = \frac{1}{m} \sum^m_{i=1} |y- \hat y|
$$

  • Exponential Loss:指数损失函数

$$
L(Y,f(X)) = \frac{1}{m}\sum^m_{i=1}\exp(-y_i \cdot f(x_i))
$$

  • Log-likelihood Loss:①对数似然损失函数;②交叉熵损失函数
    • BCE(Binary Cross Entropy):二元交叉熵
    • CCE(Complement Cross Entropy):互补交叉熵
    • SCCE:稀疏多分类交叉熵
  • Huber

Huber

$$
L_\delta(y,f(x)) = \begin{cases}
\frac{1}{2}(y-f(x))^2 &,|y-f(x)| \le\delta
\\
\delta|y-f(x)| - \frac{1}{2}\delta^2 &,other
\end{cases}
$$

Huber

让我们来分析一下Huber函数的数学本质和优缺点。

从表达式上可见,Huber函数在估计量偏移样本量小的时候,本质上是平方损失函数;而当偏移大的时候,本质上是绝对误差。也就是说Huber是对MSE和MAE的融合

接下来从实际效果上思考Huber的优缺点。首先我们要分析一下MAE和MSE:考虑平方误差函数,当有一个样本的误差(大于1)较大的时候,这个误差会被严重放大,并且如果这是一个异常值,那么模型就会对这单个值作出谦让、调整(或称为适应),这就需要更多的正常值样本来平衡;再考虑绝对误差,对绝对值函数求导可知道MAE对小误差和大误差的导数是一样的,那么当一些误差发生小的偏移时(这种误差是可以被接受的,可以理解为噪声),模型应该作出轻微的调整而不是和大误差一样。所以这时候就可见Huber函数的优点啦!😜由于融合了小偏差时MSE的稳定性和大偏差时MAE的鲁棒性,使得Huber具有更加优秀的性能

Log-likelihood Loss

该损失函数一般用于分类器损失计算和评价

$$
L(Y,P(Y|X)) = - \log P(Y|X) = -\frac{1}{N}\sum_{i=1}^N\sum_{j=1}^M y_{ij} \log p_{ij}
$$

上式中符号意义为:

  • 输入样本X,样本量为N
  • 输出样本Y,样本可能的值有M种
  • 真实类别判别指标(注意是二值的)
    $$
    y_{ij}
    $$
  • 输入i分类器输出属于j可能的概率
    $$
    p_{ij}
    $$

这个玩意之所以还有个名字叫交叉熵损失,是因为和信息论中的信息熵数学表达式十分相似

BCE二元交叉熵函数

当分类器输出只有两种情况时(M=2),上式退化为二元交叉熵函数,如下式:

$$
L = - \frac{1}{N} \sum^N_{i = 1} (\hat {y_i} \log \hat{y_i} + (1-\hat{y_i}) \log(1-\hat{y_i}))
$$

显然,该式还可以继续退化:

此时称为:categorical_crossentropy

$$
\because \hat y_i = [0,1]
\\ \therefore
L = -\frac{1}{N}\sum^N_{i=1} \hat{y_i}\log \hat{y_i}
$$

评价函数

  • MAE、MSE、RMSE
  • MAPE(Mean Absolute Percentage Error):平均绝对百分比误差

$$
MAPE = \frac{1}{N} \sum^N_{i=1} | \frac{\hat{y_i} - y_i}{y_i} | \cdot 100%
$$

BUG☢真实值同时为零时,分母为0!

  • SMAPE(Symmetric Mean Absolute Percentage Error):对称平均绝对百分比误差

$$
SMAPE = \frac{1}{N} \sum^N_{i=1} | \frac{\hat{y_i} - y_i}{(|\hat{y_i}|+|y_i|) /2 } | \cdot 100%
$$

BUG☢推测值和真实值同时为零时,分母为0!

  • R Squared:决定系数
  • Confusion Matrix:混淆矩阵
    • 准确率
    • 精确率
    • 召回率

R Squared

最好的衡量线性回归法的指标

$$
R^2 = 1- \frac{\sum^n_{i=1}|\hat{y_i} - y_i |^2 }{\sum^n_{i=1}|\overline{y_i} - y_i |^2}
$$

上式中的分母部分,可以理解为一个模型(基准模型):

$$
|\overline{y_i} - y_i |^2
$$

该指标取值范围为[0,1];如果小于0,则代表你的模型预测结果还不如基准模型

Confusion Matrix

混淆矩阵也称误差矩阵,是表示精度评价的一种标准格式,用n行n列的矩阵形式来表示。此处给出的数学表示基于二分类

预测正例 预测反例
真实正例 TP(真正) FN(假反)
真实假例 FP(假正) TN(真反)

准确率(Accuracy):被预测对的样本,但是样本不平衡时效果差

$$
A = \frac{TP+TN}{TP+FP+TN+FN}
$$

精准率(Precision):预测为正的样本多少为对的

$$
P = \frac{TP}{TP+FP}
$$

召回率(Recall):实际正样本中多少预测对了

$$
R = \frac{TP}{TP+FN}
$$

神经网络原理简摘

考虑一个最简单的浅层全连接神经网络,那么需要训练的模型参数就是神经元中的权重和偏置,采用(对损失函数)梯度下降的方法:

$$
w := w-\alpha\cdot\frac{\partial J(w,b)}{\partial w}
\\
b := b-\alpha\cdot\frac{\partial J(w,b)}{\partial b}
$$

  • Copyrights © 2022-2023 RY.J
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信