单层感知器
其实这个结构很类似于我们人体的神经单元,输入信号经过计算后,把计算所得值传入f(x)激活函数中最终来判断输出y
下面是一个实际的例子
下面是感知机的w是如何进行变化的
我们通过感知机计算出来的y的值,通过设定的学习率(一般在0-1之间),就可以实现不断的更新w
下面是一个实例
当我们不断改变w的值后,最后我们通过这个单层感知机后,输出了1,即为正确的标签,目的达成。
下面是一个小案例
python实现
import numpy as np
import matplotlib.pyplot as plt
#输入数据
X=np.array([
[1,3,3],
[1,4,3],
[1,1,1],
[1,0,2]
])
#标签
Y=np.array([
[1],
[1],
[-1],
[-1]
])
#权值初始化,三个输入一个输出,取值范围-1到1
W=(np.random.random([3,1])-0.5)*2
#print(W)
#学习率设置
lr=0.11
#神经网络输出
O=0
#设置更新权值w的函数
def update():
global X,Y,W,lr
O=np.sign(np.dot(X,W))#得到四个数据的预测值
W_C=lr*(X.T.dot(Y-0))/int(X.shape[0])
W=W+W_C
for i in range(100):
update()#更新当前权值
print(W)#打印当前权值
print(i)#打印迭代次数
O=np.sign(np.dot(X,W))#计算当前输出
if(O==Y).all():#如果实际输出等于预期输出,模型收敛,循环结束
print('Finished')
print('epoch',i)
break
线性神经网络
线性神经网络在结构上与感知器非常相似,只是激活函数不同,在训练模型时吧原来的sign函数改成了purelin函数:y=x
与单层感知器的代码区别:
O=np.dot(X,W)#计算当前输出
Delta学习规则
二次代价函数:(t为真实值,y与预测值,f为激活函数),我们可以求出误差E
通过梯度下降法来最小化E的值,把w看成E的函数
上面为矩阵,下面为单个值的计算公式