import numpy as np
x1 = np.array([0, 0, 1, 1])
x2 = np.array([0, 1, 0, 1])
y1 = np.array([0, 0, 0, 1])
y2 = np.array([0, 1, 1, 1]) #真值表
alpha = 0.01
w0 = -0.8
w1 = 0.6
w2 = 0.4
def fx(x1, x2):
return w1*x1+w2*x2+w0 #定义阶跃函数
def Fx(m,n): #激活函数
if(fx(m,n)>0):
return 1
else:
return 0
#与运算循环
for i in range(5000):
w0 = w0 - (fx(x1[i % 4], x2[i % 4]) - y1[i % 4]) * alpha
w1 = w1 - (fx(x1[i % 4], x2[i % 4]) - y1[i % 4]) * x1[i % 4] * alpha
w2 = w2 - (fx(x1[i % 4], x2[i % 4]) - y1[i % 4]) * x2[i % 4] * alpha
if (abs(fx(x1[i % 4], x2[i % 4]) - y1[i % 4]) < 0.001 and abs( # 如果偏导小于0.001,输出此时权重及偏导
(fx(x1[i % 4], x2[i % 4]) - y1[i % 4]) * x1[i % 4]) < 0.001 and abs(
(fx(x1[i % 4], x2[i % 4]) - y1[i % 4]) * x2[i % 4]) < 0.01):
print(w0, w1, w2)
break
# 或运算
for i in range(5000):
w0 = w0 - (fx(x1[i % 4], x2[i % 4]) - y2[i % 4]) * alpha
w1 = w1 - (fx(x1[i % 4], x2[i % 4]) - y2[i % 4]) * x1[i % 4] * alpha
w2 = w2 - (fx(x1[i % 4], x2[i % 4]) - y2[i % 4]) * x2[i % 4] * alpha
if (abs(fx(x1[i % 4], x2[i % 4]) - y2[i % 4]) < 0.001 and abs(
(fx(x1[i % 4], x2[i % 4]) - y2[i % 4]) * x1[i % 4]) < 0.001 and abs(
(fx(x1[i % 4], x2[i % 4]) - y2[i % 4]) * x2[i % 4]) < 0.01):
print(w0, w1, w2)
break

本文通过Python实现了一个简单的逻辑门训练过程,包括与门和或门。利用梯度下降法调整权重,使得模型能够正确预测逻辑门的结果。展示了如何初始化参数、定义激活函数以及更新权重。

被折叠的 条评论
为什么被折叠?



