代码:
import numpy as np
x1 = np.array([0, 0, 1, 1])
x2 = np.array([0, 1, 0, 1])
t = np.array([0, 0, 0, 1])
t1 = np.array([0, 1, 1, 1]) # 四个数组组成真值表
w0 = 0.5
w1 = 0.5
b = -0.8
a = 0.001
def mysum(x1, x2):
# 设置基本线性函数
return w0 * x1 + w1 * x2 + b
def active(m,n):
# 定义激活函数
if (mysum(m,n) > 0):
return 1
else:
return 0
for i in range(1000): # 迭代循环1000次
w0 = w0 - a * (mysum(x1[i % 4], x2[i % 4]) - t[i % 4])
w1 = w1 - a * (mysum(x1[i % 4], x2[i % 4]) - t[i % 4]) * x1[i % 4]
del0 = (mysum(x1[i % 4], x2[i % 4]) - t[i % 4])
del1 = (mysum(x1[i % 4], x2[i % 4]) - t[i % 4]) * x1[i % 4]
del2 = (mysum(x1[i % 4], x2[i % 4]) - t[i % 4]) * x2[i % 4]
b = b - (mysum(x1[i % 4], x2[i % 4]) - t[i % 4]) * a
avg = (abs(del0) + abs(del1) + abs(del2)) * 1 / 3
# 如果偏导小于0.001,输出此时权重及偏导
while (del0 < a and del1 < a and del2 < a):
print(del0, del1, del2) # 输出最终的梯度g0,g1,g2
print('平均误差:' + str(avg))
break
结果: