老饼扒源码-matlab的LVQ神经网络(newlvq)源码的算法解读

原创文章,转载请说明来自《老饼讲解神经网络》:bp.bbbdata.com


目录

一、符号说明

二、主流程

三、初始化说明

(一) W21权重初始化

(二) W32权重的初始化

四、训练规则说明(LVQ1,LVQ2)

(一) LVQ1

(二) LVQ2

五、网络的预测


本文讲解LVQ的具体算法流程和细节,算法流程扒自matlab2014神经网络工具箱,是《LVQ-重现matlab实现代码》的具体讲解。


一、符号说明

  • W21:代表网络第1层(输入层)到第2层(隐层)的权重矩阵。size:隐神经元个数*输入个数。每i行代表所有输入到第i个神经元的权重。
  • W32:代表网络第2层(输入层)到第3层(隐层)的权重矩阵。size:输出个数*隐神经元个数。每i行代表所有隐神经元到第i个输出的权重。

二、主流程

LVQ的训练主要使用单样本训练方式,它的的主流程如下:

  • 1、初始化权重w21和w32。
  • 2、循环迭代训练,直到达到退出条件(误差足够小或达到最大训练次数)
  • ----不放回随机抽取N个样本,每次使用一个样本训练:
  • ---------按训练规则lvq1或lvq2计算隐节点更新量dw21。
  • ---------更新w21 = w21+dw21
  • ----计算本轮误差,如果是历史最优,则将当前w21作为历史最优w21。
  • 返回历史最优的w21。   

训练流程图如下:


三、初始化说明

(一) W21权重初始化

W21是输入层到隐层的权重,它的采用中心点方式初始化。
即所有隐神经元都初始化为输入的中心点,即


W21权重初始化计算实例 :

2个输入,3个隐节点。

X的输入范围 :


(1) 算出x1,x2的中心点分别为5和4.
(2)则W21初始化为 

(二) W32权重的初始化

W32不直接设置,依靠输出节点与隐节点连接占比pc进行初始化。
例如,3个隐节点,2个输出,当pc = [0.4,0.6]时,第1个节点占floor(0.4*3) = floor(1.2)=1个隐节点,第二个输出则占2个。
PASS: 在代码实现上,先算得pc累积值,再按累积值映射到隐神经元编号结束位置,从而确定隐神经元的具体分配,即可确定W32。

W32计算实例解说:
隐节点个数hn: 8,输出个数out_n = 3 ,分配占比pc=[0.3,0.2,0.5]
(1)计算pc累积值


(2)映射到隐神经元编号结束位置


由此可得, 1-2号隐节点连接到输出1,3-4号隐节点连接到输出2,5-8号隐节点连接到输出3.
(3)确定 W32


四、训练规则说明(LVQ1,LVQ2)

(一) LVQ1

(1) 初始化dw21全为0(size与w21一致)
(2) 如果用于训练的样本(注意,每次只有一个样本)预测正确,则竞争成功的隐神经元权重(位置)调整量为样本方向,否则为样本反方向.

说明:

  • k :  竞争成功的隐神经元编号。
  • dW21(k,:) : 代表dW21的第k行。
  • lr:   学习率,可设为0.01,
  • x:   本次训练的输入样本,
  • w:   为竞争成功的隐神经元对应的权重,即W21的第k行。

(二) LVQ2

(1) 获取最近聚类中心点和次近聚类中心点的编号k1和k2
(2) 如果训练样本到k1和k2的距离d1与d2过小,即满足

 则进行更新。


五、网络的预测

LVQ网络输出y的直接按数学表达式计算即可:

其中,dist为欧氏距离,compet则为向量竞争函数,即向量中最大值者为1,其实为0.


相关文章

​《BP神经网络梯度推导》
​​​​​​《BP神经网络提取的数学表达式》
《一个BP的完整建模流程》

猜你喜欢

转载自blog.csdn.net/dbat2015/article/details/124981052
今日推荐