第十一次作业 感知器

物联202   邱郑思毓   2008070213

作业要求:根据感知器,编写算法实现两个数(0,1)的和运算

完成情况:

类似上一次作业的线性回归代码,在理解上进行简单的修改,便得出了感知器的代码

import sys

import numpy as np

w0 = 0
w1 = 0
w2 = 1    #设置初始的三个系数w0,w1,w2
alpha = 0.001    #设置学习率
x1 = np.array([0, 0, 1, 1])   #输入两个出入
x2 = np.array([1, 1, 0, 1])
y = np.array([0, 0, 0, 1])    #输入两个输入和运算得出的结果
for i in range(100):    #扩充100倍,便于迭代
    x1 = np.append(x1, [0, 0, 1, 1])
    x2 = np.append(x2, [1, 1, 0, 1])
    y = np.append(y, [0, 0, 0, 1])


def hy(x1, x2):    #列出算式
    return w0 + w1 * x1 + w2 * x2


def error(x1, x2, y):    #为方便计算,列出各个算式的函数
    return np.sum(np.power((hy(x1, x2) - y), 2)) / 2


def delta0(x1, x2, y):
    return alpha * (hy(x1, x2) - y)


def delta1(x1, x2, y):
    return alpha * (hy(x1, x2) - y) * x1


def delta2(x1, x2, y):
    return alpha * (hy(x1, x2) - y) * x2


def fun(a):
    if a < 0.5:
        return 0
    elif a >= 0.5:
        return 1


for i in range(500):   #一共迭代500次,通过算式得出w0,w1,w2
    a = delta0(x1[i], x2[i], y[i])
    b = delta1(x1[i], x2[i], y[i])
    c = delta2(x1[i], x2[i], y[i])
    w0 = w0 - a
    w1 = w1 - b
    w2 = w2 - c
    erro = error(x1[i], x2[i], y[i])
print(w0, w1, w2, erro)
print(fun(hy(0,0)))   #进行验算
print(fun(hy(1,1)))
print(fun(hy(1,0)))

你可能感兴趣的:(python,numpy)