感知器
import numpy as np
def andhanshu(x):
if x > 0:
return 1
if x < 0:
return 0
class waiji(object):
def __init__(self, x):
self.x = x
self.w = np.random.rand(2, 1)
self.b = np.random.rand(1, 1)
def forward(self):
self.y = np.zeros((4, 1))
for i in range(self.x.shape[0]):
self.y[i] = andhanshu(np.sum(self.x[i] * self.w + self.b))
def backward(self, n, ls):
derlta = np.zeros((4, 1))
loss = 0
for i in range(self.x.shape[0]):
derlta[i] = (self.y)[i] - t[i]
loss -= derlta[i]
gradient_b = derlta[i]
self.b -= lr * gradient_b
gradient_w = self.x[i].T * gradient_b
self.w -= lr * gradient_w
print(loss)
print(self.w)
print(self.b)
if __name__ == '__main__':
x = np.matrix([[1, 1],
[1, 0],
[0, 1],
[0, 0]])
t = np.matrix([[1],
[0],
[0],
[0]])
g = waiji(x)
lr = 0.01
for i in range(1000):
f = g.forward()
b = g.backward(t, lr)
|