# week6 **Repository Path**: sika0819/week6 ## Basic Information - **Project Name**: week6 - **Description**: 第六周作业 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-05-21 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 载入数据 ```python #!/usr/bin/env python3 import numpy as np samples_and = [ [0, 0, 0], [1, 0, 0], [0, 1, 0], [1, 1, 1], ] samples_or = [ [0, 0, 0], [1, 0, 1], [0, 1, 1], [1, 1, 1], ] samples_xor = [ [0, 0, 0], [1, 0, 1], [0, 1, 1], [1, 1, 0], ] ``` ```python def perceptron(samples): w = np.array([1, 2]) b = 0 a = 1 for i in range(10):# 训练轮数 for j in range(4):# 数据(batch_size) x = np.array(samples[j][:2]) y = 1 if np.dot(w, x) + b > 0 else 0 #y=wx+b计算出来的值 d = np.array(samples[j][2])#真值 delta_b = a*(d-y) #通过真值与计算值的差来倒推bias delta_w = a*(d-y)*x#通过真值与计算值的差来倒推2 print('epoch {} sample {} [{} {} {} {} {} {} {}]'.format( i, j, w[0], w[1], b, y, delta_w[0], delta_w[1], delta_b ))# 打印每一轮训练值 w = w + delta_w b = b + delta_b ``` ```python print('logical and') perceptron(samples_and) ``` logical and epoch 0 sample 0 [1 2 0 0 0 0 0] epoch 0 sample 1 [1 2 0 1 -1 0 -1] epoch 0 sample 2 [0 2 -1 1 0 -1 -1] epoch 0 sample 3 [0 1 -2 0 1 1 1] epoch 1 sample 0 [1 2 -1 0 0 0 0] epoch 1 sample 1 [1 2 -1 0 0 0 0] epoch 1 sample 2 [1 2 -1 1 0 -1 -1] epoch 1 sample 3 [1 1 -2 0 1 1 1] epoch 2 sample 0 [2 2 -1 0 0 0 0] epoch 2 sample 1 [2 2 -1 1 -1 0 -1] epoch 2 sample 2 [1 2 -2 0 0 0 0] epoch 2 sample 3 [1 2 -2 1 0 0 0] epoch 3 sample 0 [1 2 -2 0 0 0 0] epoch 3 sample 1 [1 2 -2 0 0 0 0] epoch 3 sample 2 [1 2 -2 0 0 0 0] epoch 3 sample 3 [1 2 -2 1 0 0 0] epoch 4 sample 0 [1 2 -2 0 0 0 0] epoch 4 sample 1 [1 2 -2 0 0 0 0] epoch 4 sample 2 [1 2 -2 0 0 0 0] epoch 4 sample 3 [1 2 -2 1 0 0 0] epoch 5 sample 0 [1 2 -2 0 0 0 0] epoch 5 sample 1 [1 2 -2 0 0 0 0] epoch 5 sample 2 [1 2 -2 0 0 0 0] epoch 5 sample 3 [1 2 -2 1 0 0 0] epoch 6 sample 0 [1 2 -2 0 0 0 0] epoch 6 sample 1 [1 2 -2 0 0 0 0] epoch 6 sample 2 [1 2 -2 0 0 0 0] epoch 6 sample 3 [1 2 -2 1 0 0 0] epoch 7 sample 0 [1 2 -2 0 0 0 0] epoch 7 sample 1 [1 2 -2 0 0 0 0] epoch 7 sample 2 [1 2 -2 0 0 0 0] epoch 7 sample 3 [1 2 -2 1 0 0 0] epoch 8 sample 0 [1 2 -2 0 0 0 0] epoch 8 sample 1 [1 2 -2 0 0 0 0] epoch 8 sample 2 [1 2 -2 0 0 0 0] epoch 8 sample 3 [1 2 -2 1 0 0 0] epoch 9 sample 0 [1 2 -2 0 0 0 0] epoch 9 sample 1 [1 2 -2 0 0 0 0] epoch 9 sample 2 [1 2 -2 0 0 0 0] epoch 9 sample 3 [1 2 -2 1 0 0 0] 可以看出第二轮以后就找出了结果,w1=1,w2=2,b=-2 ```python print('logical or') perceptron(samples_or) ``` logical or epoch 0 sample 0 [1 2 0 0 0 0 0] epoch 0 sample 1 [1 2 0 1 0 0 0] epoch 0 sample 2 [1 2 0 1 0 0 0] epoch 0 sample 3 [1 2 0 1 0 0 0] epoch 1 sample 0 [1 2 0 0 0 0 0] epoch 1 sample 1 [1 2 0 1 0 0 0] epoch 1 sample 2 [1 2 0 1 0 0 0] epoch 1 sample 3 [1 2 0 1 0 0 0] epoch 2 sample 0 [1 2 0 0 0 0 0] epoch 2 sample 1 [1 2 0 1 0 0 0] epoch 2 sample 2 [1 2 0 1 0 0 0] epoch 2 sample 3 [1 2 0 1 0 0 0] epoch 3 sample 0 [1 2 0 0 0 0 0] epoch 3 sample 1 [1 2 0 1 0 0 0] epoch 3 sample 2 [1 2 0 1 0 0 0] epoch 3 sample 3 [1 2 0 1 0 0 0] epoch 4 sample 0 [1 2 0 0 0 0 0] epoch 4 sample 1 [1 2 0 1 0 0 0] epoch 4 sample 2 [1 2 0 1 0 0 0] epoch 4 sample 3 [1 2 0 1 0 0 0] epoch 5 sample 0 [1 2 0 0 0 0 0] epoch 5 sample 1 [1 2 0 1 0 0 0] epoch 5 sample 2 [1 2 0 1 0 0 0] epoch 5 sample 3 [1 2 0 1 0 0 0] epoch 6 sample 0 [1 2 0 0 0 0 0] epoch 6 sample 1 [1 2 0 1 0 0 0] epoch 6 sample 2 [1 2 0 1 0 0 0] epoch 6 sample 3 [1 2 0 1 0 0 0] epoch 7 sample 0 [1 2 0 0 0 0 0] epoch 7 sample 1 [1 2 0 1 0 0 0] epoch 7 sample 2 [1 2 0 1 0 0 0] epoch 7 sample 3 [1 2 0 1 0 0 0] epoch 8 sample 0 [1 2 0 0 0 0 0] epoch 8 sample 1 [1 2 0 1 0 0 0] epoch 8 sample 2 [1 2 0 1 0 0 0] epoch 8 sample 3 [1 2 0 1 0 0 0] epoch 9 sample 0 [1 2 0 0 0 0 0] epoch 9 sample 1 [1 2 0 1 0 0 0] epoch 9 sample 2 [1 2 0 1 0 0 0] epoch 9 sample 3 [1 2 0 1 0 0 0] 可以看出第一轮就找出了结果,w1=1,w2=2,b=0 ```python print('logical xor') perceptron(samples_xor) ``` logical xor epoch 0 sample 0 [1 2 0 0 0 0 0] epoch 0 sample 1 [1 2 0 1 0 0 0] epoch 0 sample 2 [1 2 0 1 0 0 0] epoch 0 sample 3 [1 2 0 1 -1 -1 -1] epoch 1 sample 0 [0 1 -1 0 0 0 0] epoch 1 sample 1 [0 1 -1 0 1 0 1] epoch 1 sample 2 [1 1 0 1 0 0 0] epoch 1 sample 3 [1 1 0 1 -1 -1 -1] epoch 2 sample 0 [0 0 -1 0 0 0 0] epoch 2 sample 1 [0 0 -1 0 1 0 1] epoch 2 sample 2 [1 0 0 0 0 1 1] epoch 2 sample 3 [1 1 1 1 -1 -1 -1] epoch 3 sample 0 [0 0 0 0 0 0 0] epoch 3 sample 1 [0 0 0 0 1 0 1] epoch 3 sample 2 [1 0 1 1 0 0 0] epoch 3 sample 3 [1 0 1 1 -1 -1 -1] epoch 4 sample 0 [0 -1 0 0 0 0 0] epoch 4 sample 1 [0 -1 0 0 1 0 1] epoch 4 sample 2 [1 -1 1 0 0 1 1] epoch 4 sample 3 [1 0 2 1 -1 -1 -1] epoch 5 sample 0 [0 -1 1 1 0 0 -1] epoch 5 sample 1 [0 -1 0 0 1 0 1] epoch 5 sample 2 [1 -1 1 0 0 1 1] epoch 5 sample 3 [1 0 2 1 -1 -1 -1] epoch 6 sample 0 [0 -1 1 1 0 0 -1] epoch 6 sample 1 [0 -1 0 0 1 0 1] epoch 6 sample 2 [1 -1 1 0 0 1 1] epoch 6 sample 3 [1 0 2 1 -1 -1 -1] epoch 7 sample 0 [0 -1 1 1 0 0 -1] epoch 7 sample 1 [0 -1 0 0 1 0 1] epoch 7 sample 2 [1 -1 1 0 0 1 1] epoch 7 sample 3 [1 0 2 1 -1 -1 -1] epoch 8 sample 0 [0 -1 1 1 0 0 -1] epoch 8 sample 1 [0 -1 0 0 1 0 1] epoch 8 sample 2 [1 -1 1 0 0 1 1] epoch 8 sample 3 [1 0 2 1 -1 -1 -1] epoch 9 sample 0 [0 -1 1 1 0 0 -1] epoch 9 sample 1 [0 -1 0 0 1 0 1] epoch 9 sample 2 [1 -1 1 0 0 1 1] epoch 9 sample 3 [1 0 2 1 -1 -1 -1] 可以看出结果一直无法被找到。是因为感知器只能处理线性问题 异或在二维上的表现: ![image](异或感知器.jpg) 可以看出,二维空间里无法找到一条直线把这两个角色区分开