计算机视觉基础知识(十三)--推理和训练

有监督学习

  • Supervisied Learning
  • 输入的数据为训练数据;
  • 模型在训练过程中进行预期判断;
  • 判断错误的话进行修正;
  • 直到模型判断预期达到要求的精确性;
  • 关键方法为分类和回归
  • 逻辑回归(Logistic Regression)
  • BP神经网络(Back Propagation Neural Network)

无监督学习

  • Unsupervisied Learning
  • 没有训练数据;
  • 模型基于无标记数据进行判断;
  • 关键方法为关联规则学习和聚合;

训练

  • Training;
  • 通过训练优化自身网络参数;
  • 让模型更为准确;
  • 这个过程称为训练;

推理

  • Inference;
  • 训练好的模型,在训练集上表现良好;
  • 我们希望其对未见过的数据(现场数据)能够表现的一样好;
  • 如果现场数据的区分率比较高,证明模型的训练效果较好;
  • 整个过程称为推理;

优化和泛化

  • 深度学习的根本问题是优化和泛化的对立;
  • 优化:optimization指调节模型在训练集上得到最佳性能(学习);
  • 泛化:generalization指训练好的模型在现场数据下的性能表现(推理);

数据集的分类

  • 训练集:实际用于训练算法的数据集合;
  • 训练集用于计算梯度,确定每次迭代中网络权值的更新;
  • 验证集:用于跟踪学习效果的数据集;
  • 验证集是一个指示器,表明训练数据点之间形成的网络函数的变化;
  • 验证集上的误差值在整个训练过程中都将被监测;
  • 测试集:用于产生最后结果的数据集;

对测试集有效反应网络泛化能力的要求

  • 不能以任何形式用于网络训练;
  • 不能用于同一组备选网络进行挑选;
  • 测试集智能在训练完成和模型选择完成后使用;
  • 测试集必须代表网络使用中所涉及的所有可能情况;

交叉验证

  • 将数据分成3个部分(也可以分成更多份);
  • 第一部分用于测试,2\3部分用作训练,计算准确度;
  • 第二部分用于测试,1\3部分用作训练,计算准确度;
  • 第三部分用于测试,1\2部分用作训练,计算准确度;
  • 之后算出三个准确度的平均值,给出最后的准确度

bp神经网络

  • Back-Propagation Network 1986年提出,
  • 一种按照误差逆向传播算法训练的多层前馈网络;
  • 是目前应用最广泛的神经网络模型之一;
  • 用于函数逼近\模型识别分类\数据压缩和时间序列预测;
  • 又称反向传播神经网络;
  • 是一种有监督学习的算法;
  • 具有很强的自适应\自学习\非线性映射能力;
  • 能较好的解决数据少\信息贫乏\不确定性问题;
  • 不受非线性模型的限制;
  • 典型的BP网络含有三层:输入层\隐藏层\输出层;
  • 各层之间全连接,同层之间无连接;
  • 隐藏层可有很多层;

神经网络的训练 

  • 利用神经网络解决问题
  • 比如:图像分割\边界探测;
  • 输入x与输出y之间的关系:y=f(x)是不清楚的;
  • 但是知道f不是简单的线性函数;
  • 应该是一个抽象的复杂关系;
  • 利用神经网络去学习这个关系,存放在model中;
  • 利用model推测训练集之外的数据;
  • 得到期望的结果;

训练(学习)过程

  • 正向传播:
  • 信号从输入层进入;
  • 经过各隐藏层到达输出层;
  • 输出层获得实际的响应值;
  • 与实际值比较,若误差较大;
  • 转入误差反向传播阶段;
  • 反向传播
  • 按照梯度下降的方法;
  • 从输出层经各隐藏层不断的调整各神经元的连接权值和阈值;
  • 反复迭代;
  • 直到网络输入误差小到可接受的程度;
  • 或者达到预先指定的学习次数

 相关术语

代(Epoch):

  • 使用训练集的全部数据;
  • 对模型进行一次完整训练;
  • 称为一代训练

批大小(Batch size):

  • 使用训练集的一小部分样本;
  • 对模型权重进行一次反向传播的参数更新;
  • 这小部分样本被称为"一批数据"

迭代(Iteration)

  • 使用一个Batch数据;
  • 对模型进行一次参数更新的过程;
  • 被称为一次迭代或一次训练;
  • 每次迭代的结果作为下次迭代的初始值;
  • 一个迭代=一个正向传播+一个反向传播

训练批次的计算

  • Number of Batches=\frac{Training Set Size}{Batch Size};
  • 比如训练集样本数量500个;
  • batchsize=10;
  • iteration=50,
  • epoch=1

训练过程

  1. 提取特征向量作为输入
  2. 定义神经网络结构,包括隐藏层数量,激活函数等
  3. 利用反向传播不断优化权重,达到合理水平
  4. 使用网络预测现场数据(推理)

具体的训练过程

  1. 选择样本集合的一个样本(A_i,B_i),A_i为数据,B_i为标签(所属类别);
  2. 送入网络,计算网络的实际输出Y(此时网络中的权重应该是随机的)
  3. 计算D=B_i-Y(预测与实际的偏差)
  4. 根据D调整网络的权重;
  5. 对每个样本重复上述过程;
  6. 直到整个样本集的误差不超过规定范围;

更具体的训练过程

  1. 参数的随机初始化;
  2. 前向传播计算每个样本对应的输出节点激活函数值
  3. 计算损失函数
  4. 反向传播计算偏导数
  5. 使用梯度下降或者先进的优化方法跟新权值

参数的随机初始化

  • 所有参数必须初始化;
  • 且初始值不能设置成一样,比如都设置为0或者1;
  • 初始值设置为一样的话,更新后所有的参数都会相等;
  • 所有神经元的功能相同;
  • 会造成高度冗余;
  • 参数必须随机初始化;
  • 如果网络没有隐藏层,所有参数可初始化为0;
  • 该网络也就不能构成深度神经网络了

标准化(Normalizaiton)

  • 进行分类器或模型的建立与训练时;
  • 输入数据的值范围可能较大;
  • 样本中各数据量纲可能不一致;
  • 这样的数据影响模型的训练或者构建;
  • 对数据进行标准化处理是必要的;
  • 去除数据的单位限制;
  • 转化为无量纲的纯数值;
  • 便于不同单位或量级的指标进行比较和加权;
  • 最典型的为数据的归一化处理;
  • 将数据统一映射到[0.1]区间上

y=\frac{x-min}{max-min}

z-score标准化

  • 零均值归一化zero-mean normalizaiton
  • 经处理后的数据均值为0,标准差为1(正态分布)
  • \mu为样本均值,\sigma为样本标准差

y=\frac{x-\mu}{\sigma}

损失函数

  • 用于描述模型预测值与真实值的差距大小
  • 有两种常见的算法:
  • 均值平方差:MSE
  • 交叉熵:cross entropy

均值平方差

  • Mean Squared Error,MSE,也称均方误差
  • MSE=\sum_{i=1}^n\frac{1}{n}(f(x_i)-y_i)^2

交叉熵

  • cross entropy 
  • loss算法的一种;
  • 一般用于分类问题;
  • 意义是预测输入的样本属于哪一类的概率;
  • 值越小,代表预测结果越准确;
  • y代表真实值分类(0或1),a代表预测值;

C=-\frac{1}{n}\sum_x[ylna+(1-y)ln(1-a)]

损失函数的选择

  • 取决于输入标签数据的类型;
  • 输入为实数\无界的值,损失函数选择MSE
  • 输入标签为位矢量(分类标志),损失函数选择交叉熵;

梯度下降法

  • 梯度\bigtriangledown f=(\partial x1\partial f;\partial x2\partial f,...,\partial xn\partial f);
  • 指函数关于变量x的导数;
  • 方向表示函数值增大的方向;
  • 模表示函数值增大的速率;
  • 不断将参数的值向梯度的反向更新一定的大小;
  • 能够得到函数的最小值(全局最小或者局部最小)
  • 利用梯度更新参数时,
  • 将梯度乘以一个小于1的学习速率(learning rate);
  • 因为往往梯度的模较大;
  • 直接利用其更新参数会使函数值波动较大;
  • 很难收敛到一个平衡点;
  • 学习率learning rate不宜过大

\theta_{t+1}=\theta_t-\alpha_t\bigtriangledown f(\theta_t)

\frac{\partial E}{\partial W_{jk}}=-(t_k-o_k)\times sigmoid(\sum_jW_{jk}\cdot o_j)(1-sigmoid(\sum_jW_{jk}\cdot o_j))\cdot o_j

  • t_k-o_k:正确结果与节点输出结果的差值,即误差;
  • sigmoid(\sum_jW_{jk}\cdot o_j):节点激活函数,输入该节点的链路做信号与权重乘积后的加合;
  • 加合结果给到激活函数计算;
  • o_j:链路W_{jk}前端节点输出的信号值。

学习率

  • 一个重要的超参数;
  • 控制基于损失梯度调整网络权值的速度
  • 学习率越小,沿着损失梯度下降的越慢;
  • 从长远看,小的学习率的效果还不错;
  • 可以避免错过任何局部最优解;
  • 但是也意味着要花费更多的时间来收敛;
  • 尤其是当处于曲线的局部最高点时;

新权值=当前权值-学习率\times梯度

泛化能力分类

  • 欠拟合:
  • 拟合
  • 过拟合
  • 不收敛

欠拟合

  • 模型未能很好的表现数据的结构;
  • 拟合程度不高;
  • 模型不能在训练集上获得足够低的误差;

拟合

  • 测试误差与训练误差差距较小;

过拟合

  • 模型过分的拟合训练样本;
  • 对测试样本预测准确率不高;
  • 模型泛化能力较差;
  • 训练误差和测试误差差距较大;

不收敛

  • 模型不是根据训练集训练得到

过拟合详细描述

  • 给定一堆带有噪声的数据,
  • 利用模型拟合该组数据;
  • 可能把噪声数据也给拟合了;
  • 过拟合的模型:
  • 一方面会造成模型比较复杂;
  • 另一方面,模型的泛化能力太差

过拟合出现的原因

  • 错误的选择样本的方法\样本标签\或者样本数量太少;
  • 样本数据不足以代表预定的分类规则;
  • 样本噪音干扰过大,模型将部分噪音认为是特征,扰乱了预设的分类规则;
  • 假设的模型无法合理存在,或者说无法达到假设成立的条件;
  • 参数太多导致模型复杂度过高;
  • 对神经网络模型
  • 样本数据存在分类决策面不唯一;
  • 随着学习的进行,BP算法使权值收敛过于复杂的决策面;
  • 权值学习迭代次数足够多;
  • 拟合了训练数据中的噪声和训练样例中没有代表性的特征;

过拟合的解决方法

  1. 减少特征:删除与目标不相关的特征,更改特征选择方法;
  2. Early stopping;
  3. 更多的训练样本;
  4. 重新清洗数据;
  5. Dropout;

Early Stopping

  • 每一个Epoch结束时;
  • 计算Validation data 的accuracy;
  • 当accuracy不再提高时,停止训练;
  • 一个重点是如何确认validation accuracy 不再提高;
  • 不是validation accuracy一降下来便认为不再提高;
  • 经过该Epoch后,accuracy降低,随后的Epoch又让accuracy上去;
  • 不能根据几次的连续降低就判断accuracy不再提高;
  • 一般的做法
  • 训练过程中记录到目前为止最好的validation accuracy;
  • 连续10次Epoch或者更多,没有达到最佳accuracy时;
  • 认为accuracy不在提高;
  • 此时可以停止迭代(Early Stopping)
  • 该策略也成为“No-improvement-in-n”,n即为Epoch的次数;
  • 根据实际情况n可取为10,20,30

Dropout

  • 通过修改神经网络本身的结构来实现
  • 训练开始,随机删除一些(比例可能为1/2,1/3,1/4)隐藏层神经元
  • 认为这些神经元不存在,
  • 同时保持输入层与输出层神经元的个数不变;
  • 按照BP学习算法对ANN中的参数进行学习更新;
  • 虚线连接的单元不更新,认为这些神经元被删除;
  • 一次迭代更新便完成;
  • 下一次迭代中,同样随机删除一些神经元;
  • 与上次不一样,做随机选择,直到训练结束;

Dropout减少过拟合的原理

  •  随机选择忽略隐藏层节点;
  • 每个批次训练过程中,每次随机忽略的隐藏层节点都不同;
  • 这样的结果使得每次训练的网络都不一样;
  • 每次训练都可以当做一个新模型;
  • 隐含节点都以一定概率随机出现;
  • 不能保证每两个隐含节点每次同时出现;
  • 权值更新不再以来固定关系隐含节点的共同作用;
  • 阻止了某些特征仅仅在其他特定特征下才有效的情况;
  • 非常有效的神经网络模型平均方法;
  • 通过训练大量不同的网络,平均预测概率;
  • 不同的模型在不同的训练集上训练(每个Epoch的训练数据都是随机选择)
  • 最后在每个模型用相同的权重来融合;

Dropout特点

  • 经过交叉验证,隐藏节点Dropout率为0.5的时候效果最好
  • Dropout也可用作一种添加噪声的方法;
  • 直接对input进行操作,输入层设为更接近1的数,使得输入变化不会太大(0.8)
  • 缺点在训练时间是没有Dropout的网络的2-3倍;

BP算法思想

  1. 将训练集数据输入到神经网络输入层
  2. 经过隐藏层,最后达到输出层,并给出结果;
  3. 该过程为前向传播过程;
  4. 由于输出结果与实际结果存在误差;
  5. 计算估计值与实际值之间的误差;
  6. 将该误差从输出层向隐藏层传播
  7. 直到传播到输入层;
  8. 反向传播的过程中,根据误差调整各参数的值(相连神经元的权重)
  9. 使得损失函数减小;
  10. 迭代上述步骤,直到满足停止条件;

神经网络训练过程实例

  1. 第一层为输入层,包含两个神经元:i1,i2和偏置b1;
  2. 第二层是隐藏层,包含两个神经元:h1,h2和偏置b2;
  3. 第三层是输出层:o1和o2;
  4. 每条线上标注的wi是层与层之间连接的权重;
  5. 激活函数是sigmoid函数;
  6. 用z表示某神经元的加权输入和;
  7. 用a表示某神经元的输出;
  8. \eta为学习率,取0.5;

隐藏层计算

z_{h1}=w_1\times i_1+w_3 \times i_2+b_1\times 1

z_{h2}=w_2\times i_1+w_4 \times i_2+b_1\times 1

a_{h1}=\frac{1}{1+e^{-z_{h1}}}

a_{h2}=\frac{1}{1+e^{-z_{h2}}}

输出层计算

z_{o1}=w_5\times a_{h1}+w_7 \times a_{h2}+b_2\times 1

z_{o2}=w_6\times a_{h1}+w_8 \times a_{h2}+b_2\times 1

a_{o1}=\frac{1}{1+e^{-z_{o1}}}

a_{o2}=\frac{1}{1+e^{-z_{o2}}}

损失函数计算

E_{total}=\sum\frac{1}{2}(target-output)^2=E_{o1}+E_{o2}

E_{o1}=\frac{1}{2}(target-output)^2=\frac{1}{2}(target_{o1}-a_{o1})^2

E_{o2}=\frac{1}{2}(target-output)^2=\frac{1}{2}(target-a_{o2})^2

输出层--->隐藏层计算

\frac{\partial E_{total}}{\partial w_5}=\frac{\partial E_{total}}{\partial a_{o1}}\times \frac{\partial a_{o1}}{\partial z_{o1}}\times \frac{\partial z_{o1}}{\partial w_5}

\frac{\partial E_{total}}{\partial w_7}=\frac{\partial E_{total}}{\partial a_{o1}}\times \frac{\partial a_{o1}}{\partial z_{o1}}\times \frac{\partial z_{o1}}{\partial w_7}

\frac{\partial E_{total}}{\partial w_6}=\frac{\partial E_{total}}{\partial a_{o2}}\times \frac{\partial a_{o2}}{\partial z_{o2}}\times \frac{\partial z_{o2}}{\partial w_6}

\frac{\partial E_{total}}{\partial w_8}=\frac{\partial E_{total}}{\partial a_{o2}}\times \frac{\partial a_{o2}}{\partial z_{o2}}\times \frac{\partial z_{o2}}{\partial w_8}

\frac{\partial E_{total}}{\partial a_{o1}}=\frac{\partial E_{o1}}{\partial a_{o1}}=2\times \frac{1}{2}(target_{o1}-a_{o1})\times (-1)=a_{o1}-target_{o1}

\frac{\partial E_{total}}{\partial a_{o2}}=\frac{\partial E_{o2}}{\partial a_{o2}}=2\times \frac{1}{2}(target_{o2}-a_{o2})\times (-1)=a_{o2}-target_{o2}

\frac{\partial a_{o1}}{\partial z_{o1}}=-1\times \frac{1}{(1+e^{-z_{o1}})^2}\times(0+e^{-z{o1}}\times(-1))

=\frac{e^{-z_{o1}}}{(1+e^{-z_{o1}})^2}=\frac{1}{1+e^{-z_{o1}}}\times \frac{e^{-z_{o1}}}{1+e^{-z_{o1}}}=\frac{1}{1+e^{-z_{o1}}}\times(\frac{1+e^{-z_{o1}}}{1+e^{-z_{o1}}}-\frac{1}{1+e^{-z_{o1}}})

=a_{o1}\times (1-a_{o1})

\frac{\partial a_{o2}}{\partial z_{o2}}=-1\times \frac{1}{(1+e^{-z_{o2}})^2}\times(0+e^{-z{o2}}\times(-1))

=\frac{e^{-z_{o2}}}{(1+e^{-z_{o2}})^2}=\frac{1}{1+e^{-z_{o2}}}\times \frac{e^{-z_{o2}}}{1+e^{-z_{o2}}}=\frac{1}{1+e^{-z_{o2}}}\times(\frac{1+e^{-z_{o2}}}{1+e^{-z_{o2}}}-\frac{1}{1+e^{-z_{o2}}})

=a_{o2}\times (1-a_{o2})

\frac{\partial z_{o1}}{\partial w_5}=a_{h1}

\frac{\partial z_{o1}}{\partial w_7}=a_{h2}

\frac{\partial z_{o2}}{\partial w_6}=a_{h1}

\frac{\partial z_{o2}}{\partial w_8}=a_{h2}

\frac{\partial E_{total}}{\partial w_5}=\frac{\partial E_{total}}{\partial a_{o1}}\times \frac{\partial a_{o1}}{\partial z_{o1}}\times \frac{\partial z_{o1}}{\partial w_5}=(a_{o1}-target_{o1})\times a_{o1}\times(1-a_{o1})\times a_{h1}

\frac{\partial E_{total}}{\partial w_7}=\frac{\partial E_{total}}{\partial a_{o1}}\times \frac{\partial a_{o1}}{\partial z_{o1}}\times \frac{\partial z_{o1}}{\partial w_7}=(a_{o1}-target_{o1})\times a_{o1} \times (1-a_{o1})\times a_{h2}

\frac{\partial E_{total}}{\partial w_6}=\frac{\partial E_{total}}{\partial a_{o2}}\times \frac{\partial a_{o2}}{\partial z_{o2}}\times \frac{\partial z_{o2}}{\partial w_6}=(a_{o2}-target_{o2})\times a_{o2} \times (1-a_{o2})\times a_{h1}

\frac{\partial E_{total}}{\partial w_8}=\frac{\partial E_{total}}{\partial a_{o2}}\times \frac{\partial a_{o2}}{\partial z_{o2}}\times \frac{\partial z_{o2}}{\partial w_8}=(a_{o2}-target_{o2})\times a_{o2} \times (1-a_{o2})\times a_{h2}

\delta_{o1}=\frac{\partial E_{total}}{\partial a_{o1}}\times \frac{\partial a_{o1}}{\partial z_{o1}}=\frac{\partial E_{total}}{\partial z_{o1}}=(a_{o1}-target_{o1})\times a_{o1}\times (1-a_{o1})

\delta_{o2}=\frac{\partial E_{total}}{\partial a_{o2}}\times \frac{\partial a_{o2}}{\partial z_{o2}}=\frac{\partial E_{total}}{\partial z_{o2}}=(a_{o2}-target_{o2})\times a_{o2}\times (1-a_{o2})

\frac{\partial E_{total}}{\partial w_5}=\frac{\partial E_{total}}{\partial a_{o1}}\times \frac{\partial a_{o1}}{\partial z_{o1}}\times \frac{\partial z_{o1}}{\partial w_5}=\delta_{o1}\times a_{h1}

\frac{\partial E_{total}}{\partial w_7}=\frac{\partial E_{total}}{\partial a_{o1}}\times \frac{\partial a_{o1}}{\partial z_{o1}}\times \frac{\partial z_{o1}}{\partial w_7}=\delta_{o1}\times a_{h2}

\frac{\partial E_{total}}{\partial w_6}=\frac{\partial E_{total}}{\partial a_{o2}}\times \frac{\partial a_{o2}}{\partial z_{o2}}\times \frac{\partial z_{o2}}{\partial w_6}=\delta_{o2}\times a_{h1}

\frac{\partial E_{total}}{\partial w_8}=\frac{\partial E_{total}}{\partial a_{o2}}\times \frac{\partial a_{o2}}{\partial z_{o2}}\times \frac{\partial z_{o2}}{\partial w_8}=\delta_{o2}\times a_{h2}

w_5^+=w_5-\eta \times \frac{\partial E_{total}}{\partial w_5}=w_5-\eta\times \delta_{o1}\times a_{h1}

w_7^+=w_7-\eta \times \frac{\partial E_{total}}{\partial w_7}=w_7-\eta\times \delta_{o1}\times a_{h2}

w_6^+=w_6-\eta \times \frac{\partial E_{total}}{\partial w_6}=w_6-\eta\times \delta_{o2}\times a_{h1}

w_8^+=w_8-\eta \times \frac{\partial E_{total}}{\partial w_8}=w_8-\eta\times \delta_{o2}\times a_{h2}

隐藏层--->输入层计算

\frac{\partial E_{total}}{\partial w_1}=\frac{\partial E_{total}}{\partial a_{h1}}\times \frac{\partial a_{h1}}{\partial z_{h1}}\times \frac{\partial z_{h1}}{\partial w_1}

=(\frac{\partial E_{o1}}{\partial a_{h1}}+\frac{\partial E_{o2}}{\partial a_{h1}})\times \frac{\partial a_{h1}}{\partial z_{h1}}\times \frac{\partial z_{h1}}{\partial w_1}

=(\frac{\partial E_{o1}}{\partial a_{h1}}+\frac{\partial E_{o2}}{\partial a_{h1}})\times \frac{\partial a_{h1}}{\partial z_{h1}}\times i_1

=\delta_{h1}\times i_1

\frac{\partial E_{total}}{\partial w_3}=\frac{\partial E_{total}}{\partial a_{h1}}\times \frac{\partial a_{h1}}{\partial z_{h1}}\times \frac{\partial z_{h1}}{\partial w_3}

=(\frac{\partial E_{o1}}{\partial a_{h1}}+\frac{\partial E_{o2}}{\partial a_{h1}})\times \frac{\partial a_{h1}}{\partial z_{h1}}\times \frac{\partial z_{h1}}{\partial w_1}

=(\frac{\partial E_{o1}}{\partial a_{h1}}+\frac{\partial E_{o2}}{\partial a_{h1}})\times \frac{\partial a_{h1}}{\partial z_{h1}}\times i_2

=\delta_{h1}\times i_2

\frac{\partial E_{total}}{\partial w_2}=\frac{\partial E_{total}}{\partial a_{h2}}\times \frac{\partial a_{h2}}{\partial z_{h2}}\times \frac{\partial z_{h2}}{\partial w_2}

=(\frac{\partial E_{o1}}{\partial a_{h2}}+\frac{\partial E_{o2}}{\partial a_{h2}})\times \frac{\partial a_{h2}}{\partial z_{h2}}\times \frac{\partial z_{h2}}{\partial w_2}

=(\frac{\partial E_{o1}}{\partial a_{h2}}+\frac{\partial E_{o2}}{\partial a_{h2}})\times \frac{\partial a_{h2}}{\partial z_{h2}}\times i_1

=\delta_{h2}\times i_1

\frac{\partial E_{total}}{\partial w_4}=\frac{\partial E_{total}}{\partial a_{h2}}\times \frac{\partial a_{h2}}{\partial z_{h2}}\times \frac{\partial z_{h2}}{\partial w_4}

=(\frac{\partial E_{o1}}{\partial a_{h2}}+\frac{\partial E_{o2}}{\partial a_{h2}})\times \frac{\partial a_{h2}}{\partial z_{h2}}\times \frac{\partial z_{h2}}{\partial w_4}

=(\frac{\partial E_{o1}}{\partial a_{h2}}+\frac{\partial E_{o2}}{\partial a_{h2}})\times \frac{\partial a_{h2}}{\partial z_{h2}}\times i_2

=\delta_{h2}\times i_2

\frac{\partial E_{o1}}{\partial a_{h1}}=\frac{\partial E_{o1}}{\partial a_{o1}}\times \frac{\partial a_{o1}}{\partial z_{o1}}\times \frac{\partial z_{o1}}{\partial a_{h1}}=(a_{o1}-target_{o1})\times a_{o1}\times (1-a_{o1})\times w_5

\frac{\partial E_{o2}}{\partial a_{h1}}=\frac{\partial E_{o2}}{\partial a_{o2}}\times \frac{\partial a_{o2}}{\partial z_{o2}}\times \frac{\partial z_{o2}}{\partial a_{h1}}=(a_{o2}-target_{o2})\times a_{o2}\times (1-a_{o2})\times w_6

\frac{\partial E_{o1}}{\partial a_{h2}}=\frac{\partial E_{o1}}{\partial a_{o1}}\times \frac{\partial a_{o1}}{\partial z_{o1}}\times \frac{\partial z_{o1}}{\partial a_{h2}}=(a_{o1}-target_{o1})\times a_{o1}\times (1-a_{o1})\times w_7

\frac{\partial E_{o2}}{\partial a_{h2}}=\frac{\partial E_{o2}}{\partial a_{o2}}\times \frac{\partial a_{o2}}{\partial z_{o2}}\times \frac{\partial z_{o2}}{\partial a_{h2}}=(a_{o2}-target_{o2})\times a_{o2}\times (1-a_{o2})\times w_8

\delta_{h1}=[(a_{o1}-target_{o1})\times a_{o1}\times (1-a_{o1})\times w_5

+(a_{o2}-target_{o2})\times a_{o2}\times (1-a_{o2})\times w_6]\times a_{h1}\times (1-a_{h1})

\delta_{h2}=[(a_{o1}-target_{o1})\times a_{o1}\times (1-a_{o1})\times w_7

+(a_{o2}-target_{o2})\times a_{o2}\times (1-a_{o2})\times w_8]\times a_{h2}\times (1-a_{h2})

w_1^+=w_1-\eta \times \frac{\partial E_{total}}{\partial w_1}=w_1-\eta\times \delta_{h1}\times i_1

w_3^+=w_3-\eta \times \frac{\partial E_{total}}{\partial w_3}=w_3-\eta\times \delta_{h1}\times i_2

w_2^+=w_2-\eta \times \frac{\partial E_{total}}{\partial w_2}=w_2-\eta\times \delta_{h2}\times i_1

w_4^+=w_4-\eta \times \frac{\partial E_{total}}{\partial w_4}=w_4-\eta\times \delta_{h2}\times i_2

step1 前向传播

  • 输入层--->隐藏层

z_{h1}=w_1\times i_1+w_3\times i_2+b_1\times 1

=0.16\times 0.07+0.30\times 0.12+0.4 \times 1

=0.4472

z_{h2}=w_2\times i_1+w_4 \times i_2+b_1\times 1

=0.25\times 0.07+0.35\times 0.12+0.4 \times 1

=0.4595

a_{h1}=\frac{1}{1+e^{-z_{h1}}}

=\frac{1}{1+e^{-0.4472}}=0.26894142136

a_{h2}=\frac{1}{1+e^{-z_{h2}}}

=\frac{1}{1+e^{-0.4595}}=0.26894142136

  • 隐藏层--->输出层

z_{o1}=w_5\times a_{h1}+w_7 \times a_{h2}+b_2\times 1

=0.38\times 0.26894142136+0.52\times 0.26894142136+0.49\times 1

=0.732047279224

z_{o2}=w_6\times a_{h1}+w_8 \times a_{h2}+b_2\times 1

=0.47\times 0.26894142136+0.58\times 0.26894142136+0.49\times 1

=0.772388492428

a_{o1}=\frac{1}{1+e^{-z_{o1}}}

=\frac{1}{1+e^{-0.732047279224}}=0.26894142136

a_{o2}=\frac{1}{1+e^{-z_{o2}}}

=\frac{1}{1+e^{-0.772388492428}}=0.26894142136

  • 到此,前向传播过程结束;
  • 得到的输出值为【0.26894142136,0.26894142136】
  • 与实际值【0.04,0.89】相差甚远

step2 反向传播

  • 计算损失函数

E_{o1}=\frac{1}{2}(target-output)^2=\frac{1}{2}(target_{o1}-a_{o1})^2

=\frac{1}{2}(0.04-0.26894142136)^2=0.02620708721

E_{o2}=\frac{1}{2}(target-output)^2=\frac{1}{2}(target-a_{o2})^2

=\frac{1}{2}(0.89-0.26894142136)^2=0.19285687905

E_{total}=\sum\frac{1}{2}(target-output)^2=E_{o1}+E_{o2}

=0.02620708721+0.19285687905

=0.21906396626

  • 输出层--->隐藏层权值更新

\delta_{o1}=\frac{\partial E_{total}}{\partial a_{o1}}\times \frac{\partial a_{o1}}{\partial z_{o1}}=\frac{\partial E_{total}}{\partial z_{o1}}=(a_{o1}-target_{o1})\times a_{o1}\times (1-a_{o1})

=(0.26894142136-0.04)\times 0.26894142136\times (1-0.26894142136)

=0.04501261545

\delta_{o2}=\frac{\partial E_{total}}{\partial a_{o2}}\times \frac{\partial a_{o2}}{\partial z_{o2}}=\frac{\partial E_{total}}{\partial z_{o2}}=(a_{o2}-target_{o2})\times a_{o2}\times (1-a_{o2})

=(0.26894142136-0.89)\times 0.26894142136\times (1-0.26894142136)

=-0.12210752779

w_5^+=w_5-\eta \times \frac{\partial E_{total}}{\partial w_5}=w_5-\eta\times \delta_{o1}\times a_{h1}

=0.38-0.5\times 0.04501261545\times0.26894142136

=0.37394712161

w_7^+=w_7-\eta \times \frac{\partial E_{total}}{\partial w_7}=w_7-\eta\times \delta_{o1}\times a_{h2}

=0.52-0.5\times 0.04501261545\times0.26894142136

=0.51394712161

w_6^+=w_6-\eta \times \frac{\partial E_{total}}{\partial w_6}=w_6-\eta\times \delta_{o2}\times a_{h1}

=0.47+0.5\times 0.12210752779\times0.26894142136

=0.48641988604

w_8^+=w_8-\eta \times \frac{\partial E_{total}}{\partial w_8}=w_8-\eta\times \delta_{o2}\times a_{h2}

=0.58+0.5\times 0.12210752779\times0.26894142136

=0.59641988604

  • 隐藏层--->输入层权值更新

\delta_{h1}=[(a_{o1}-target_{o1})\times a_{o1}\times (1-a_{o1})\times w_5

+(a_{o2}-target_{o2})\times a_{o2}\times (1-a_{o2})\times w_6]\times a_{h1}\times (1-a_{h1})

=[(0.26894142136-0.04)\times 0.26894142136\times (1-0.26894142136)\times 0.38

+(0.26894142136-0.89)\times 0.26894142136\times (1-0.26894142136)\times 0.47]\times 0.26894142136\times (1-0.26894142136)

=[0.00247678776-0.16702837688]\times 0.19661193323

=-0.03235280605

\delta_{h2}=[(a_{o1}-target_{o1})\times a_{o1}\times (1-a_{o1})\times w_7

+(a_{o2}-target_{o2})\times a_{o2}\times (1-a_{o2})\times w_8]\times a_{h2}\times (1-a_{h2})

 =[(0.26894142136-0.04)\times 0.26894142136\times (1-0.26894142136)\times 0.52

+(0.26894142136-0.89)\times 0.26894142136\times (1-0.26894142136)\times 0.58]\times 0.26894142136\times (1-0.26894142136)

=[0.00338928851-0.20612012466]\times 0.19661193323

=-0.03985930162

w_1^+=w_1-\eta \times \frac{\partial E_{total}}{\partial w_1}=w_1-\eta\times \delta_{h1}\times i_1

=0.16+0.5\times 0.03235280605\times 0.07

=0.16113234821

w_3^+=w_3-\eta \times \frac{\partial E_{total}}{\partial w_3}=w_3-\eta\times \delta_{h1}\times i_2

=0.30+0.5\times 0.03235280605\times 0.12

=0.30194116836

w_2^+=w_2-\eta \times \frac{\partial E_{total}}{\partial w_2}=w_2-\eta\times \delta_{h2}\times i_1

=0.25+0.5\times 0.03985930162\times 0.07

=0.25139507556

w_4^+=w_4-\eta \times \frac{\partial E_{total}}{\partial w_4}=w_4-\eta\times \delta_{h2}\times i_2

=0.35+0.5\times 0.03985930162\times 0.12

=0.35239155809

  • 到此,反向传播算法完成
  • 最后把更新的权值重新计算,反复迭代

Keras简介

  • Keras由纯Python编写;
  • 基于theano/tensorfolw的深度学习框架;
  • 是一个高层神经网络API;
  • 支持快速实验,将idea迅速转化为结果;

Keras 适用场景

  • 简易和快速的原型设计;
  • 具有高度模块化,极简和可扩充性;
  • 支持CNN和RNN,或二者的结合;
  • 无缝CPU和GPU切换;

Softmax

  • 多用于分类过程;
  • 将多个神经元的输出映射到【0,1】区间内;
  • 可看成概率来理解,从而进行多分类;
  • 一个数组V;
  • V_i表示V中的第i个元素;
  • 该元素的softmax值为:

S_i=\frac{e^{V_i}}{\sum_j e^{V_j}}

  • 34
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你好!要训练YOLOv4-tiny模型使用自己的数据集,你需要按照以下步骤进行操作: 1. 数据准备:准备一个包含标注信息的数据集,其中包含图像和相应的边界框信息。确保每个图像都有对应的标注文件,其中包含每个物体的类别和边界框的位置。 2. 模型配置:下载YOLOv4-tiny的模型配置文件,该文件定义了模型的结构和超参数。你可以从Darknet官方GitHub仓库中获取。 3. 权重文件:下载预训练的权重文件,这将有助于更快地收敛模型。你可以从Darknet官方GitHub仓库中找到与YOLOv4-tiny相对应的权重文件。 4. 数据标注:将你的数据集标注为YOLOv4-tiny所需的格式。可以使用标注工具(如LabelImg、VoTT等)来标注每个图像中的物体类别和边界框。 5. 数据划分:将数据集划分为训练集和验证集。建议使用80%的数据作为训练集,20%的数据作为验证集。 6. 配置文件修改:根据你的数据集和需求,修改YOLOv4-tiny的配置文件。主要修改类别数量、路径和大小等参数。 7. 训练:使用修改后的配置文件和预训练权重文件,开始训练YOLOv4-tiny模型。你可以使用Darknet框架来进行训练,按照其文档中的指示进行操作。 8. 调优:通过逐渐调整超参数(如学习率、批大小等)和训练策略(如数据增强、学习率衰减等),进一步优化模型性能。 9. 模型评估:使用验证集评估模型的性能,包括计算平均精度(mAP)等指标。根据评估结果进行调整和改进。 10. 模型推理:完成训练后,你可以使用训练得到的权重文件进行目标检测任务。在推理时,加载模型权重并对新图像进行预测。 以上是训练YOLOv4-tiny模型使用自己的数据集的一般步骤。请注意,这是一个相对复杂的任务,需要一定的深度学习和计算机视觉知识。建议在开始之前先学习相关的基础知识和技术。祝你成功!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值