、
import math
import random
class Perceptron:
def __init__(self) -> None:
self.th = 0.5
self.eps = 1e-4
self.tot = 0
self.de = [10.0, 10.0, 10.0]
self.W = [random.random(), random.random(), random.random()]
self.X = [[1, 0, 0], [1, 0, 1], [1, 1, 0], [1, 1, 1]]
self.T = [0, 0, 0, 1]
def __csigm(self, x:float):
return 1.0 / (1.0 + math.pow(math.e, -x))
def __csgm(self, x:list):
res = 0.0
for i in range(3):
res = res + x[i] * self.W[i]
# res = (res + 1.0) / 2.0
return res
def check(self):
for p in range(4):
for i in range(3):
s = self.__csigm(self.__csgm(self.X[p]))
t = (s - self.T[p]) * s * (1.0 - s) * self.X[p][i]
if t > self.eps:
return True
return False
def iterate(self):
self.tot = self.tot + 1
p = random.randint(0, 3)
for i in range(3):
s = self.__csigm(self.__csgm(self.X[p]))
self.de[i] = (s - self.T[p]) * s * (1 - s) * self.X[p][i]
for i in range(3):
self.W[i] = self.W[i] - self.de[i] * self.th
def printResult(self):
print('Iteration time: ', self.tot)
print('Coe: ', self.W)
print('Result:')
for i in range(4):
x = self.X[i]
print(x[1:], ': ', end='')
res = 0.0
for j in range(3):
res = res + x[j] * self.W[j]
res = self.__csigm(res)
print('%.0f(%f)' % (res, res))
def main():
perceptron = Perceptron()
while perceptron.check():
perceptron.iterate()
perceptron.printResult()
if __name__ == '__main__':
main()