人工神经网络结构图
将多个输入节点(x1,x2,x3)与权向量(w1,w2,w3)相乘累加,然后再通过某一个激活函数,得到最终的输出值
(一)感知器学习规则
• 学习率一般取0~1之间
• 学习率太大会容易造成权值调整不稳定
• 学习率太小,权值调整太慢,迭代次数多
(二)设定模型收敛条件
• 误差小于设定的某个值
• 两次迭代之间权值变化很小
• 设定最大迭代次数
线性神经网络在结构上与感知器非常相似,只是激活函数不同
感知器 : sign() // 取符号函数
线性神经网络 : purelin() // y = x
(相关代码)
import numpy as np
import matplotlib.pyplot as plt
#定义输入数据 4个数据 (3,3) (4,3) (1,1) (2,1)
X = np.array([[1,3,3],
[1,4,3],
[1,1,1],
[1,2,1]])
#定义标签
T = np.array([[1],
[1],
[-1],
[-1]])
#权值初始化 生成3个小于1的随机数
W = np.random.random([3,1])
#学习率
lr = 0.1
#神经网络输出
Y = 0
#训练函数
def train():
global X,T,W,Y,lr
#同时计算4个数据的预测值
# np.dot 矩阵相乘 Wi * Xi
Y = np.sign(np.dot(X,W))
#计算误差
E = T - Y
#计算权值的变化 .shape[0] 代表X的行数
delta_W = lr * (X.T.dot(E)) / X.shape[0]
#更新权值
W = W + delta_W
for i in range(100):
train()
#画图
#正样本
x1 = [3,4]
y1 = [3,3]
#负样本
x2 = [1,2]
y2 = [1,1]
#定义分界线
k = -W[1] / W[2]
b = -W[0] / W[2]
#设定2个点
xdata = (0,5)
plt.plot(xdata,xdata * k + b,"r")
plt.scatter(x1,y1,c="b")
plt.scatter(x2,y2,c="y")
plt.show()
if(Y == T).all():
print(i)
break
实验效果 (感知器迭代8次生成效果图)
(线性神经网络迭代100次生成效果图)