BP神经网络的梯度公式推导(三层结构)

news2025/1/16 5:00:27
本站原创文章,转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com

 

目录

一. 推导目标

1.1 梯度公式目标 

1.2 本文梯度公式目标

二. 网络表达式梳理

2.1 梳理三层BP神经网络的网络表达式

三. 三层BP神经网络梯度推导过程

3.1 简化推导目标

3.2 输出层权重的梯度推导

3.3 输出层阈值的梯度推导

3.4隐层权重的梯度推导

 3.5 隐层阈值的梯度推导

四. 推导结果总结

4.1 三层BP神经网络梯度公式


BP神经网络的训练算法基本都涉及到梯度公式,

本文提供三层BP神经网络的梯度公式和推导过程

一. 推导目标


BP神经网络的梯度推导是个复杂活,

在推导之前 ,本节先把推导目标清晰化

1.1 梯度公式目标 


训练算法很多,但各种训练算法一般都需要用到各个待求参数(w,b)在损失函数中的梯度,
因此求出w,b在损失函数中的梯度就成为了BP神经网络必不可少的一环,
求梯度公式,即求以下误差函数E对各个w,b的偏导:

\displaystyle \displaystyle \textbf{E}(W,b)=\dfrac{1}{M}\sum \limits _{m=1}^{M} \dfrac{1}{K}\sum \limits _{k=1}^{K} (\textbf{f}(\textbf{x})_{km}-\text{y}_{km})^2


\textbf{f}(\textbf{x})_{km}代表网络对第m个样本第k个输出的预测值,w,b就隐含在 \textbf{f}(\textbf{x})

1.2 本文梯度公式目标


虽然梯度只是简单地求E对w,b的偏导,但E中包含网络的表达式f(x),就变得非常庞大,
求偏导就成了极度艰巨晦涩的苦力活,对多层结构通式的梯度推导稍为抽象,
本文不妨以最常用的三层结构作为具体例子入手,求出三层结构的梯度公式
 即:输入层-隐层-输出层 (隐层传递函数为tansig,输出层传递函数为purelin)

虽然只是三层的BP神经网络,

但梯度公式的推导,仍然不仅是一个体力活,还是一个细致活,

且让我们细细一步一步慢慢来


二. 网络表达式梳理


在损失函数E中包括了网络表达式,在求梯度之前,

先将表达式的梳理清晰,有助于后面的推导

2.1 梳理三层BP神经网络的网络表达式


网络表达式的参考形式
隐层传递函数为tansig,输出层传递函数为purelin的三层BP神经网络,
有形如下式的数学表达式
 

网络表达式的通用矩阵形式
 写成通用的矩阵形式为

\textbf{f}(\textbf{x}) = \textbf{W}^{(o)}\textbf{tansig}(\textbf{W}^{(h)}\textbf{x}+\textbf{b}^{(h)})+\textbf{b}^{(o)}

这里的 \textbf{W}为矩阵, \textbf{x}\textbf{b}为向量,
上标(o)和(h)分别代表输出层(out)和隐层(hide),
例如,2输入,4隐节点,2输出的BP神经网络可以图解如下:

 


三. 三层BP神经网络梯度推导过程


本节我们具体推导误差函数对每一个待求参数w,b的梯度

3.1 简化推导目标


由于E的表达式较为复杂,
  不妨先将问题转化为"求单样本梯度"来简化推导表达式
 对于任何一个需要求偏导的待求参数w,都有:
\displaystyle \dfrac{\partial \textbf{E}}{\partial w} = \dfrac{\partial \dfrac{1}{M}\sum \limits _{m=1}^{M} \dfrac{1}{K}\sum \limits _{k=1}^{K} (\textbf{f}(\textbf{x})_{km}-\text{y}_{km})^2 }{\partial w} =\dfrac{1}{M}\sum \limits _{m=1}^{M}\dfrac{\partial \dfrac{1}{K}\sum \limits _{k=1}^{K}(\textbf{f}(\textbf{x})_{km}-\text{y}_{km})^2 }{\partial w} = \dfrac{1}{M}\sum \limits _{m=1}^{M}\dfrac{\partial \textbf{E}_m}{\partial w}
即损失函数的梯度,等于单个样本的损失函数的梯度之和(E对b的梯度也如此),
因此,我们先推导单个样本的梯度,最后再对单样本梯度求和即可。
现在问题简化为求
\dfrac{\partial\textbf{ E}_m}{\partial w} = \dfrac{\partial \dfrac{1}{K}\sum \limits _{k=1}^{K}(\textbf{f}(\textbf{x})_{k}-\text{y}_{k})^2 }{\partial w}

3.2 输出层权重的梯度推导


输出层权重梯度推导
输出层的权重为"输出个数*隐节点个数"的矩阵,
现推导任意一个权重wji (即连接第i个隐层与第j个输出的权重)的单样本梯度
如下:
\displaystyle \begin{aligned} \dfrac{\partial\textbf{ E}_m}{\partial w_\textbf{ji}^{(o)}} &= \dfrac{\partial \dfrac{1}{K}\sum \limits _{k=1}^{K}(\textbf{f}(\textbf{x})_\textbf{k}-\text{y}_\textbf{k})^2 }{\partial w_\textbf{ji}^{(o)}} \\&= \dfrac{1}{K}\sum \limits _{k=1}^{K}\dfrac{\partial (\textbf{f}(\textbf{x})_\textbf{k}-\text{y}_\textbf{k})^2 }{\partial w_\textbf{ji}^{(o)}} \\&= \dfrac{1}{K}\sum \limits _{k=1}^{K}2 (\textbf{f}(\textbf{x})_\textbf{k}-\text{y}_\textbf{k})\dfrac{\partial \textbf{f}(\textbf{x})_\textbf{k} }{\partial w_\textbf{ji}^{(o)}} \end{aligned}
事实上,只有第j个输出 \textbf{f(x)}_\textbf{j}是关于  w_\textbf{ji}^{(o)}的函数,也即对于其它输出  \dfrac{\partial \textbf{f}(\textbf{x})_{k(k\ne j )} }{\partial W} = 0
因此, 
上式即等于 = \dfrac{1}{K}* 2 *(\textbf{f}(\textbf{x})_\textbf{j}-\text{y}_\textbf{j})\dfrac{\partial \textbf{f}(\textbf{x})_\textbf{j} }{\partial w_\textbf{ji}}
继续求导
\displaystyle \begin{aligned} & \dfrac{1}{K}* 2 *(\textbf{f}(\textbf{x})_\textbf{j}-\text{y}_\textbf{j})\dfrac{\partial \textbf{f}(\textbf{x})_\textbf{j} }{\partial w_\textbf{ji}^{(o)}} \\=& \color{blue}\dfrac{1}{K}* 2 *(\textbf{f}(\textbf{x})_\textbf{j}-\text{y}_\textbf{j})\dfrac{\partial \left ( w_\textbf{j1}^{(o)}*\textbf{tansig}_\textbf{1}+...+w_\textbf{ji}^{(o)}*\textbf{tansig}_\textbf{i}+...+w_\textbf{jh}^{(o)}*\textbf{tansig}_\textbf{h}+b_\textbf{j}^{(o)} \right ) }{\partial w_\textbf{ji}^{(o)}} \\= &\dfrac{1}{K}* 2 *(\textbf{f}(\textbf{x})_\textbf{j}-\text{y}_\textbf{j})*\textbf{tansig}_\textbf{i} \end{aligned}
\textbf{f}(\textbf{x})_\textbf{j}-\text{y}_\textbf{j}是第j个输出的误差,简记为 E_\textbf{j}                      
\textbf{tansig}_\textbf{i}是第j个隐节点的激活值,简记为 A_\textbf{i}(A即Active)

上式即可写为
\dfrac{\partial \textbf{E}_m}{\partial w_\textbf{ji}^{(o)}} = \dfrac{1}{K}* 2 *E_\textbf{j}*A_\textbf{i}             
上述是单样本的梯度,
整体样本的梯度则应记为 

\displaystyle \dfrac{\partial \textbf{E}}{w_\textbf{ij}^{(o)}} = \dfrac{1}{M*K}\sum\limits_{m=1}^{M} 2 *E_\textbf{jm}*A_\textbf{im}

 M,K为样本个数、输出个数                                         
E_\textbf{jm}=\textbf{f}(\textbf{x})_\textbf{jm}-\text{y}_\textbf{jm}是第m个样本第j个输出的误差      
A_\textbf{im}=\textbf{tansig}_\textbf{im}是第m个样本第i个隐节点的激活值    

3.3 输出层阈值的梯度推导


输出层阈值梯度推导
对于阈值 b_\textbf{j}^{(o)}(第j个输出节点的阈值)的推导与权重梯度的推导是类似的,
只是上述标蓝部分应改为

\displaystyle \begin{aligned} \dfrac{\partial \textbf{E}_{m} }{\partial b_\textbf {j}^{(o)}} &= \dfrac{1}{K}* 2 *(\textbf{f}(\textbf{x})_\textbf{j}-\text{y}_\textbf{j})\dfrac{\partial \left ( w_\textbf{j1}^{(o)}*\textbf{tansig}_\textbf{1}+...+w_\textbf{ji}^{(o)}*\textbf{tansig}_\textbf{i}+...+w_\textbf{jh}^{(o)}*\textbf{tansig}_\textbf{h}+b_\textbf{j}^{(o)} \right ) }{\partial b_\textbf{j}^{(o)}} \\&= \dfrac{1}{K}* 2 *(\textbf{f}(\textbf{x})_\textbf{j}-\text{y}_\textbf{j}) \end{aligned}
简记为
\dfrac{\partial \textbf{E}_m}{\partial b_\textbf{j}^{(o)}} =\dfrac{1}{K}* 2 *E_\textbf{j}
上述是单样本的梯度,
整体样本的梯度则应记为 

\dfrac{\partial \textbf{E}}{\partial b_\textbf{j}^{(o)}} = \dfrac{1}{M*K}\sum\limits_{m=1}^{M}* 2 *E_\textbf{jm}
 M,K为样本个数、输出个数                
E_\textbf{jm}=\textbf{f}(\textbf{x})_\textbf{jm}-\text{y}_\textbf{jm}​是第m个样本第j个输出的误差      

3.4隐层权重的梯度推导


隐层的权重为"隐节点个数*输入个数"的矩阵,
现推导任意一个权重 w_\textbf{ji}^{(h)}(即连接第i个输入与第j个隐节点的权重)的单样本梯度
如下:
\displaystyle \begin{aligned} \dfrac{\partial\textbf{ E}_m}{\partial w_\textbf{ji}^{(h)}} &= \dfrac{\partial \dfrac{1}{K}\sum \limits _{k=1}^{K}(\textbf{f}(\textbf{x})_{k}-\text{y}_{k})^2 }{\partial w_\textbf{ji}^{(h)}} \\&= \dfrac{1}{K} \sum \limits _{k=1}^{K}\dfrac{\partial (\textbf{f}(\textbf{x})_{k}-\text{y}_{k})^2 }{\partial w_\textbf{ji}^{(h)}} \\&= \dfrac{1}{K} \sum \limits _{k=1}^{K}2 (\textbf{f}(\textbf{x})_{k}-\text{y}_{k})\dfrac{\partial \textbf{f}(\textbf{x})_{k} }{\partial w_\textbf{ji}^{(h)}} \\&=\dfrac{1}{K} \sum \limits _{k=1}^{K}2 (\textbf{f}(\textbf{x})_{k}-\text{y}_{k})\dfrac{\partial \left ( w_\textbf{k1}^{(o)}*\textbf{tansig}_\textbf{1}+...w_\textbf{kj}^{(o)}*\textbf{tansig}_\textbf{j}+...+w_\textbf{kh}^{(o)}*\textbf{tansig}_\textbf{h}+b_\textbf{k}^{(o)} \right ) }{\partial w_\textbf{ji}^{(h)}} \end{aligned}

只有第j个tansig是关于  w_\textbf{ji}^{(h)}的函数,所以上式可以写成

  =\dfrac{1}{K} \sum \limits _{k=1}^{K}2 (\textbf{f}(\textbf{x})_{k}-\text{y}_{k})\dfrac{\partial \left ( w_\textbf{kj}^{(o)}*\textbf{tansig}_\textbf{j} \right ) }{\partial w_\textbf{ji}^{(h)}}
继续求导
  \displaystyle \begin{aligned} &=\dfrac{1}{K} \sum \limits _{k=1}^{K}2 (\textbf{f}(\textbf{x})_{k}-\text{y}_{k})\dfrac{\partial \left ( w_\textbf{kj}^{(o)}*\textbf{tansig}_\textbf{j} \right ) }{\partial w_\textbf{ji}^{(h)}} \\&=\dfrac{1}{K} \sum \limits _{k=1}^{K}2 (\textbf{f}(\textbf{x})_{k}-\text{y}_{k})*w_\textbf{kj}^{(o)}*\dfrac{\partial \left ( \textbf{tansig}_\textbf{j} \right ) }{\partial w_\textbf{ji}^{(h)}} \\&=\dfrac{1}{K} \sum \limits _{k=1}^{K}2 (\textbf{f}(\textbf{x})_{k}-\text{y}_{k})*w_\textbf{kj}^{(o)}*\dfrac{\partial \left (\textbf{tansig}(w_\textbf{j1}^{(h)}x_\textbf{1}+...+w_\textbf{ji}^{(h)}x_\textbf{i}+...+w_\textbf{jn}^{(h)}x_\textbf{n}+b_\textbf{j}^{(h)}) \right ) }{\partial w_\textbf{ji}^{(h)}} \end{aligned}  \color{blue}=\dfrac{1}{K} \sum \limits _{k=1}^{K}2 (\textbf{f}(\textbf{x})_{k}-\text{y}_{k})*w_\textbf{kj}^{(o)}*\dfrac{\partial \left (\textbf{tansig}(w_\textbf{j1}^{(h)}x_\textbf{1}+...+w_\textbf{ji}^{(h)}x_\textbf{i}+...+w_\textbf{jn}^{(h)}x_\textbf{n}+b_\textbf{j}^{(h)}) \right ) }{\partial (w_\textbf{j1}^{(h)}x_\textbf{1}+...+w_\textbf{ji}^{(h)}x_\textbf{i}+...+w_\textbf{jn}^{(h)}x_\textbf{n}+b_\textbf{j}^{(h)}) }\dfrac{\partial (w_\textbf{j1}^{(h)}x_\textbf{1}+...+w_\textbf{ji}^{(h)}x_\textbf{i}+...+w_\textbf{jn}^{(h)}x_\textbf{n}+b_\textbf{j}^{(h)}) }{\partial w_\textbf{ji}^{(h)}}  \displaystyle \begin{aligned} &=\dfrac{1}{K} \sum \limits _{k=1}^{K}2 (\textbf{f}(\textbf{x})_{k}-\text{y}_{k})*w_\textbf{kj}^{(o)}*\dfrac{\partial \left (\textbf{tansig}(w_\textbf{j1}^{(h)}x_\textbf{1}+...+w_\textbf{ji}^{(h)}x_\textbf{i}+...+w_\textbf{jn}^{(h)}x_\textbf{n}+b_\textbf{j}^{(h)}) \right ) }{\partial (w_\textbf{j1}^{(h)}x_\textbf{1}+...+w_\textbf{ji}^{(h)}x_\textbf{i}+...+w_\textbf{jn}^{(h)}x_\textbf{n}+b_\textbf{j}^{(h)}) }x_\textbf{i} \\&=\dfrac{1}{K} \sum \limits _{k=1}^{K}2 (\textbf{f}(\textbf{x})_{k}-\text{y}_{k})*w_\textbf{kj}^{(o)}*\dfrac{\partial \left (\textbf{tansig}(\textbf{w}_\textbf{j:}^{(h)}\textbf{x}+b_\textbf{j}^{(h)}) \right ) }{\partial (\textbf{w}_\textbf{j:}^{(h)}\textbf{x}+b_\textbf{j}^{(h)})}x_\textbf{i} \end{aligned}
又由 \textbf{tansig}'(x) = 1-\textbf{tansig}^2(x)
所以上式为:
\dfrac{\partial \textbf{E}_m }{\partial w_\textbf{ji}^{(h)}} =\dfrac{1}{K} \sum \limits _{k=1}^{K}2 *(\textbf{f}(\textbf{x})_{k}-\text{y}_{k})*w_\textbf{kj}^{(o)}* \left (1-\textbf{tansig}_\textbf{j}^2\right ) x_\textbf{i}
简写为
\displaystyle \dfrac{\partial \textbf{E}_m }{\partial w_\textbf{ji}^{(h)}} =\dfrac{1}{K} \sum \limits _{k=1}^{K}2 *E_k*w_\textbf{kj}^{(o)}* \left (1-A_\textbf{j}^2\right ) x_\textbf{i}
上述是单样本的梯度,对整体样本则有:
\displaystyle \dfrac{\partial \textbf{E} }{\partial w_\textbf{ji}^{(h)}} = \dfrac{1}{M*K}\sum\limits_{m=1}^{M} \sum \limits _{k=1}^{K}2 *E_\textbf{km}*w_\textbf{jk}^{(o)}* \left (1-A_\textbf{jm}^2\right ) x_\textbf{im}
 M,KM,K为样本个数、输出个数                                              
E_\textbf{km}=\textbf{f}(\textbf{x})_\textbf{km}-\text{y}_\textbf{km}​是第m个样本第k个输出的误差        
A_\textbf{im}=\textbf{tansig}_\textbf{im}是第m个样本第i个隐节点的激活值           
x_\textbf{im}​是第m个样本第i个输入                                                  

 3.5 隐层阈值的梯度推导


隐层阈值梯度推导
对于阈值b_\textbf{j}^{(h)}  ​(第j个隐节点的阈值)的推导与隐层权重梯度的推导是类似的,
只是蓝色部分应改为

\displaystyle \begin{aligned} &=\dfrac{1}{K} \sum \limits _{k=1}^{K}2 (\textbf{f}(\textbf{x})_{k}-\text{y}_{k})*w_\textbf{kj}^{(o)}*\dfrac{\partial \left (\textbf{tansig}(w_\textbf{j1}^{(h)}x_\textbf{1}+...+w_\textbf{ji}^{(h)}x_\textbf{i}+...+w_\textbf{jn}^{(h)}x_\textbf{n}+b_\textbf{j}^{(h)}) \right ) }{\partial (w_\textbf{j1}^{(h)}x_\textbf{1}+...+w_\textbf{ji}^{(h)}x_\textbf{i}+...+w_\textbf{jn}^{(h)}x_\textbf{n}+b_\textbf{j}^{(h)}) }\dfrac{\partial (w_\textbf{j1}^{(h)}x_\textbf{1}+...+w_\textbf{ji}^{(h)}x_\textbf{i}+...+w_\textbf{jn}^{(h)}x_\textbf{n}+b_\textbf{j}^{(h)}) }{\partial b_\textbf{j}^{(h)}} \\&=\dfrac{1}{K} \sum \limits _{k=1}^{K}2 (\textbf{f}(\textbf{x})_{k}-\text{y}_{k})*w_\textbf{kj}^{(o)}*\dfrac{\partial \left (\textbf{tansig}(\textbf{w}_\textbf{j:}^{(h)}\textbf{x}+b_\textbf{j}^{(h)}) \right ) }{\partial (\textbf{w}_\textbf{j:}^{(h)}\textbf{x}+b_\textbf{j}^{(h)}) } \end{aligned}
又由 \textbf{tansig}'(x) = 1-\textbf{tansig}^2(x)
所以上式为:
\dfrac{\partial \textbf{E}_m }{\partial b_\textbf{j}^{(h)}} =\dfrac{1}{K} \sum \limits _{k=1}^{K}2 *(\textbf{f}(\textbf{x})_{k}-\text{y}_{k})*w_\textbf{kj}^{(o)}* \left (1-\textbf{tansig}_\textbf{j}^2\right )
简写为 \displaystyle \dfrac{\partial \textbf{E}_m }{\partial b_\textbf{j}^{(h)}} =\dfrac{1}{K} \sum \limits _{k=1}^{K}2 *E_k*w_\textbf{kj}^{(o)}* \left (1-A_\textbf{j}^2\right )
上述是单样本的梯度,对整体样本则有:
\displaystyle \dfrac{\partial \textbf{E} }{\partial b_\textbf{j}^{(h)}} = \dfrac{1}{M*K}\sum\limits_{m=1}^{M} \sum \limits _{k=1}^{K}2 *E_\textbf{km}*w_\textbf{jk}^{(o)}* \left (1-A_\textbf{jm}^2\right )
 M,K为样本个数、输出个数                                              
E_\textbf{km}=\textbf{f}(\textbf{x})_\textbf{km}-\text{y}_\textbf{km}是第m个样本第k个输出的误差        
A_\textbf{im}=\textbf{tansig}_\textbf{im}是第m个样本第i个隐节点的激活值         

   

四. 推导结果总结


4.1 三层BP神经网络梯度公式


输出层梯度公式
输出层权重梯度:  \displaystyle \dfrac{\partial \textbf{E}}{w_\textbf{ji}^{(o)}} = \dfrac{1}{M*K}\sum\limits_{m=1}^{M} 2 *E_\textbf{jm}*A_\textbf{im}                       
输出层阈值梯度:   \displaystyle \dfrac{\partial \textbf{E}}{\partial b_\textbf{j}^{(o)}} = \dfrac{1}{M*K}\sum\limits_{m=1}^{M}* 2 *E_\textbf{jm}                                            
隐层梯度公式
隐层权重梯度:  \displaystyle \dfrac{\partial \textbf{E} }{\partial w_\textbf{ji}^{(h)}} = \dfrac{1}{M*K}\sum\limits_{m=1}^{M} \sum \limits _{k=1}^{K}2 *E_\textbf{km}*w_\textbf{jk}^{(o)}* \left (1-A_\textbf{jm}^2\right ) x_\textbf{im}
隐层阈值梯度:   \displaystyle \dfrac{\partial \textbf{E} }{\partial b_\textbf{j}^{(h)}} = \dfrac{1}{M*K}\sum\limits_{m=1}^{M} \sum \limits _{k=1}^{K}2 *E_\textbf{km}*w_\textbf{jk}^{(o)}* \left (1-A_\textbf{jm}^2\right )      
✍️符号说明
 M,K为样本个数、输出个数                                               
E_\textbf{km}=\textbf{f}(\textbf{x})_\textbf{km}-\text{y}_\textbf{km}是第m个样本第k个输出的误差        
A_\textbf{im}=\textbf{tansig}_\textbf{im}​是第m个样本第i个隐节点的激活值           
x_\textbf{im}是第m个样本第i个输入                                                  


 相关文章

​《BP神经网络梯度推导》

​​​​​​《BP神经网络提取的数学表达式》

《一个BP的完整建模流程》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/44949.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

模拟电路(详细版)--放大电路的频率效应(RC电路)

一、高通电路 1.1传输特性 AuA_uAu​ RR1jωC\frac{R}{R \frac {1} { j \omega C}}RjωC1​R​   (补充知识:j是复数域中的一个旋转因子) 详细求解思路:   求解AuA_uAu​就是要求输入与输出的关系。 所以AuA_uAu​ U˙oU˙…

门店数字化转型| 美容院管理系统

随着互联网信息的高速发展,行业数字化进程加快,传统美容院面临几个难题。 1、竞争激烈、拓客困难。 美业巨头迅速扩张积压中小型门店生存空间。大多数中小美容院仍旧停留在发传单、口口相传的传统渠道,辐射范围非常有限。 2、投资周期长、资…

Linux网络配置管理

目录 一、实验目的 二、实验软硬件要求 三、实验预习 1、利用ifconfig 命令实现ip地址、MAC地址的配置,并测试网络连通性 1-1查看网卡 1-2临时改写eth0网卡地址 1-3测试连通性 2、通过修改interfaces配置文件,分别实现ip地址的动态配置和静态配置…

【信号处理】时序数据中的稀疏辅助信号去噪和模式识别(Matlab代码实现)

目录 一、概述 二、算例及仿真 📢算例一: 📢算例二: 📢算例三: 📢算例四: 📢算例五: 📢算例六: 三、Matlab代码实现 一、概述…

【笔试强训】Day 4

🌈欢迎来到笔试强训专栏 (꒪ꇴ꒪(꒪ꇴ꒪ )🐣,我是Scort目前状态:大三非科班啃C中🌍博客主页:张小姐的猫~江湖背景快上车🚘,握好方向盘跟我有一起打天下嘞!送给自己的一句鸡汤&#x…

初识数据结构

目录 1. 集合的框架 集合框架的重要性 数据结构的介绍 算法的介绍 容器背后对应的数据结构 2. 时间复杂度和空间复杂度 算法效率 时间复杂度 时间复杂度的概念 大O的渐进表示法 常见的时间复杂度的计算 空间复杂度 空间复杂度的概念 从本章开始又要开始新的篇章&a…

流媒体传输 - RTMP 协议报文分析

握手之后,连接开始对一个或多个 chunk stream 进行合并。创建的每个块都有一个唯一 id 对其进行关联,这个 id 叫做 chunk stream id。这些块通过网络进行传输。传递时,每个块必须被完全发送才可以发送下一块。在接收端,这些块被根…

【毕业设计】深度学习车辆颜色识别检测系统 - python opencv YOLOv5

文章目录1 前言2 实现效果3 CNN卷积神经网络4 Yolov55 数据集处理及模型训练6 最后1 前言 🔥 Hi,大家好,这里是丹成学长的毕设系列文章! 🔥 对毕设有任何疑问都可以问学长哦! 这两年开始,各个学校对毕设…

pytorch初学笔记(十三):神经网络基本结构之Sequential层的使用以及搭建完整的小型神经网络实战

目录 一、Container下Sequential层的介绍 1.1 作用 1.2 Example 二、实战神经网络搭建以及sequential的使用 2.1 前期准备 2.1.1 神经网络模型 2.1.2 求卷积过程中的padding参数 2.2 网络搭建 2.3 sequential的使用 2.4 检验网络正确性 三、完整代码 3.1 控制台输出 …

【Rust日报】2022-11-28 使用 Rust 编写解释型语言

使用 Rust 编写解释型语言这是一本关于使用 Rust 来编写解释型语言的指导书.从理论基础, 内存分配, 真实实践, GC 等方面循序渐进的指导如何使用 Rust 来编写解释型语言.原文链接: https://rust-hosted-langs.github.io/book/introduction.htmlRust的所有权和生命周期这是一篇从…

Java数据审计工具:Envers and JaVers比较

在Java世界中,有两种数据审计工具:Envers和JaVers。 Envers已经存在了很长时间,它被认为是主流。 JaVers提供全新的方法和技术独立性。 如果您考虑哪种工具更适合您的项目,本文是一个很好的起点。 本文分为三个部分。首先&#x…

[附源码]计算机毕业设计springboot电影院网上售票系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

SQL注入漏洞 | bool型

文章目录前言MySQL bool型前言 SQL注入漏洞 | iwebsecSQL注入漏洞 | 数字型参考文章文章所涉及的脚本代码,可以自己动手敲一次,增进理解,形成自己的SQl注入脚本,以后可以不断复用。 MySQL bool型 随便试试看回显 bool注入原理…

毕业设计 单片机LSRB算法的走迷宫小车 - 嵌入式 stm32

文章目录0 前言1 简介2 主要器件3 实现效果4 硬件设计马达驱动器(L298N)Mpu 605060 RPM 直流电机红外传感器Arduino Pro mini5 软件说明“LSRB”算法6 最后0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点&a…

小米三季报:手机不振,汽车加码

配图来自Canva可画 ​如果将2022年第一季度的滑落视作气温转冷的话,那么小米的冬天已经持续了三个季度了。 小米不久前发布的2022年第三季度财报显示,小米在第三季度营收、毛利、调整后利润或多或少地都在下降,经营利润更是“扭盈为亏”&am…

Spring Boot Admin 监控指标接入Grafana可视化

其他相关文章: Spring Boot Admin 参考指南SpringBoot Admin服务离线、不显示健康信息的问题Spring Boot Admin2 EnableAdminServer的加载Spring Boot Admin2 AdminServerAutoConfiguration详解Spring Boot Admin2 实例状态监控详解Spring Boot Admin2 自定义JVM监控…

智慧环卫管理系统解决方案(垃圾分类)

1.1 垃圾分类管理子系统 1.1.1 公众参与互动平台 可为客户量身打造微信公众号,搭建互动交流的平台,更好的调动居民参与垃圾分类的热情。 1.1.1.1 分类指导 将目前城市的垃圾处理情况、垃圾分类现状、分类的意义,以数据来说明垃圾分类的…

MyBatis 源码解读 一讲到底

序言 前面大概的介绍了一下mybatis的一些东西,那么现在我们来解析一下Mybatis的源码,就从demo开始 Testpublic void TestExample() throws IOException {String resource "mybatis-config.xml";InputStream inputStream Resources.getResou…

人才资源开发杂志人才资源开发杂志社人才资源开发编辑部2022年第21期目录

开卷有益《人才资源开发》投稿:cnqikantg126.com 年轻干部要走好成长成才之路 赖宁; 1 特别关注 迎难而上 勇担重任 推进河南人事考试高质量发展 常万琦; 6-7 工作要闻 第五届中国河南招才引智创新发展大会开幕 归欣 ;张笑闻; 8 河南省12家企业和2个…

ceph 线程池分析

ceph 线程池 1. WHY 线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止…