import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import math
import random
def sigmoid(x):
return 1 / (1 + math.exp(-x))
e0 = 1
e1 = 1
e2 = 1
alpha = 0.1
omega0 = np.random.uniform(-1,0)
omega1 = np.random.uniform(0,1)
omega2 = np.random.uniform(0,1)
omega = np.array([omega1,omega1])
eps = 0.0000000001
x = np.array([[0,0],[1,1],[1,0],[0,1]])
t = np.array([0,1,0,0])
i = 0
cnt = 0
while(abs(e0) >= eps or abs(e1) >= eps or abs(e2) >= eps):
cnt += 1
z1 = np.sum((x[i] * omega))
e0 = (1-sigmoid(z1 + omega0)) * sigmoid(z1 + omega0) * ((sigmoid(z1 + omega0) - t[i]))
e1 = (1-sigmoid(z1 + omega0)) * sigmoid(z1 + omega0) * ((sigmoid(z1 + omega0) - t[i])) * x[i][0]
e2 = (1-sigmoid(z1 + omega0)) * sigmoid(z1 + omega0) * ((sigmoid(z1 + omega0) - t[i])) * x[i][1]
i += 1
if(i > 3):
i = 0
omega0 = omega0 - (alpha * e0)
omega1 = omega1 - (alpha * e1)
omega2 = omega2 - (alpha * e2)
omega = np.array([omega1, omega2])
print(e0,e1,e2)
print(cnt)
print(omega0,omega1,omega2)
print(sigmoid(omega0 + omega1 * 0 + omega2 * 0))
print(sigmoid(omega0 + omega1 * 1 + omega2 * 0))
print(sigmoid(omega0 + omega1 * 0 + omega2 * 1))
print(sigmoid(omega0 + omega1 * 1 + omega2 * 1))
用segmoid函数拟合阶跃函数
最新推荐文章于 2021-12-08 01:38:32 发布