自适共振神经网络算法 ART1 算法python 代码实现
由于学习需要ART算法,python 和matlab 又没有直接调用的模块和函数,故自己写了一个简单易懂、快捷优化了的ART1 算法,代码一共80行左右,附带详细解析,如下:
# coding=utf-8
import numpy as np
# 初始化内心向量矩阵B 和外星向量矩阵T (每一列标识一个 内星/外星 向量)
# 内星向量是C层传入R层的权值 ,外星向量是R层记录模式的向量,R层反馈给C层
def Set_B0_T0(n):
b = 1 / (1 + n)
B = []
T = []
for i in range(n):
B.append(b)
T.append(1)
# 先构造 一列初始向量,再将向量矩阵化(因为后续的算法针对矩阵化的 matrix类型进行)
# numpy的mat函数就是将向量转化成矩阵的
B = np.mat(B)
T = np.mat(T)
# 矩阵.T 表示矩阵的转置,将一行转成一列了(因为我是用列来表示 内\外 星向量的)
B = B.T
T = T.T
return B, T
# 当竞争获胜向量匹配成功后,才有权力改变它的 内\外星向量权值
# 参照书本给的方式,定义权值改变函数
def AdjustBT(B, T, x, j):
x = np.mat(x)
xigama_TX = x * T[:, j] # 矩阵*矩阵= 表示矩阵乘法
xigama_TX = xigama_TX[0, 0]
B[:, j] = np.multiply(T[:, j], x.T) * (1 / (0.5 + xigama_TX))
T[:, j] = np.multiply(T[:, j], x.T) # np.multiply 是矩阵点乘
return B, T
# 定义 竞争函数,选取R层竞争获胜的向量;由于每次只选一个竞争获胜的向量,再配对不成功的回调过程中
# 会造成Python代码十分麻烦的内嵌函数形式,所以我直接比较他们并且排序,返回一个按大小顺序排列的索引 list
# 如果需要回调,我直接再这个list 里面依次选择就行了 ,十分方便
<