感知器实现and函数
在人工智能领域,有一个方法叫机器学习。在机器学习这个方法里,有一类算法叫神经网络,感知器也叫作神经元,是神经网络的基本组成单元。
一个感知器有如下组成部分:
1.输入权值
一个感知器可以接收多个输入(x1,x2…),每个输入上有一个权值(w1,w2…),此外还有一个偏置项b,用w0来表示。
2.激活函数
感知器的激活函数可以有很多选择,我们可以选择阶跃函数来作为激活函数,阶跃函数是在输入值未达到阈值后,输出一直为0,当输入达到阈值,输出值做突然的跳转
3.输出
感知器的训练
前面的权重项和偏置项的值要用到感知器训练算法来获得
将权重项和偏置项随机初始化值,然后,利用梯度下降算法迭代的修改wi以及b,直到训练完成。
每次从训练数据中取出一个样本的输入向量,使用感知器计算其输出,再根据梯度下降算法来调整权重。每处理一个样本就调整一次权重。经过多轮迭代后(即全部的训练数据被反复处理多轮),就可以训练出感知器的权重,使之实现目标函数。
import numpy as np
from numpy import exp, random
def forward(input):
a1 = w * input
a2 = a1.sum() + b
if a2 > 0:
out = 1
else:
out = 0
return out
def backward(t, y, x):
w_delta = (t - y) * x
# print(w_delta.shape)
b_delta = (t - y)
return w_delta, b_delta
x = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
t = np.array([0, 0, 0, 1])
random.seed(1000)
w = random.random((1, 2))
b = random.random()
j = 0
for i in range(10000):
# print(x[j,:])
# print(x[j])
input = x[j, :]
y = forward(input)
w_delta, b_delta = backward(t[j], y, x[j])
w = w + 0.01 * w_delta
b = b + 0.01 * b_delta
# print(j)
if j < 3:
j += 1
else:
j = 0
print(y)
print(w, b)
1
[[0.15358959 0.02500694]] -0.16971713565097618
第10000次所用数据为1,1 结果为1