物联202 邱郑思毓 2008070213
作业要求:根据感知器,编写算法实现两个数(0,1)的和运算
完成情况:
类似上一次作业的线性回归代码,在理解上进行简单的修改,便得出了感知器的代码
import sys
import numpy as np
w0 = 0
w1 = 0
w2 = 1 #设置初始的三个系数w0,w1,w2
alpha = 0.001 #设置学习率
x1 = np.array([0, 0, 1, 1]) #输入两个出入
x2 = np.array([1, 1, 0, 1])
y = np.array([0, 0, 0, 1]) #输入两个输入和运算得出的结果
for i in range(100): #扩充100倍,便于迭代
x1 = np.append(x1, [0, 0, 1, 1])
x2 = np.append(x2, [1, 1, 0, 1])
y = np.append(y, [0, 0, 0, 1])
def hy(x1, x2): #列出算式
return w0 + w1 * x1 + w2 * x2
def error(x1, x2, y): #为方便计算,列出各个算式的函数
return np.sum(np.power((hy(x1, x2) - y), 2)) / 2
def delta0(x1, x2, y):
return alpha * (hy(x1, x2) - y)
def delta1(x1, x2, y):
return alpha * (hy(x1, x2) - y) * x1
def delta2(x1, x2, y):
return alpha * (hy(x1, x2) - y) * x2
def fun(a):
if a < 0.5:
return 0
elif a >= 0.5:
return 1
for i in range(500): #一共迭代500次,通过算式得出w0,w1,w2
a = delta0(x1[i], x2[i], y[i])
b = delta1(x1[i], x2[i], y[i])
c = delta2(x1[i], x2[i], y[i])
w0 = w0 - a
w1 = w1 - b
w2 = w2 - c
erro = error(x1[i], x2[i], y[i])
print(w0, w1, w2, erro)
print(fun(hy(0,0))) #进行验算
print(fun(hy(1,1)))
print(fun(hy(1,0)))