斋藤康毅著的深度学习入门的学习记录 第二章 感知机

第二章  感知机

2.3 感知机的实现

2.3.1 简单实现

  用python实现一个与门,先定义一个接收参数x1和x2的AND函数。

 1 # 与门:w1, w2, theta =0.5, 0.5, 0.7
 2 # 与非门:w1, w2, theta =-0.5, -0.5, -0.7
 3 # 或门:w1, w2, theta =m, n, 0  m和n任意正数
 4 
 5 def AND(x1, x2):
 6     w1, w2, theta =0.5, 0.5, 0.7
 7     tmp = x1*w1 + x2*w2
 8     if tmp <= theta:
 9         return 0
10     elif tmp > theta:
11         return 1
12 
13 y1=AND(0, 0)
14 y2=AND(0, 1)
15 y3=AND(1, 0)
16 y4=AND(1, 1)
17 print(y1,y2,y3,y4)

2.3.2 导入权重和偏置

  刚才的与门比较容易理解,但是考虑到后续的神经网络,我们改写一个形式,采用权重和偏执的概念

 1 import numpy as np
 2 
 3 #与门
 4 def AND(x1,x2):
 5     x = np.array([x1, x2])    # 输入
 6     w = np.array([0.5, 0.5])  # 权重
 7     b = -0.7                  # 偏执
 8     y = np.sum(w*x) + b
 9     if y <= 0:
10         return 0
11     else:
12         return 1
13 
14 #与非门
15 def NAND(x1, x2):
16     x = np.array([x1, x2])      # 输入
17     w = np.array([-0.5, -0.5])  # 权重
18     b = 0.7                     # 偏执
19     y = np.sum(w * x) + b
20     if y <= 0:
21         return 0
22     else:
23         return 1
24 
25 #或门
26 def OR(x1, x2):
27     x = np.array([x1, x2])    # 输入
28     w = np.array([0.5, 0.5])  # 权重
29     b = -0.2                  # 偏执
30     y = np.sum(w * x) + b
31     if y <= 0:
32         return 0
33     else:
34         return 1

 2.4 感知机的局限性

2.4.1 异或门

  仅当x1或x2中的一方为1时,才会输出1(‘异或’是拒绝其他的意思),用前面介绍的感知机是无法实现这个异或门的。

2.4.2 线性和非线性

  感知机的局限性就在于他只能表示由一条直线分割的空间。

  曲线分割的空间称其非线性空间,直线分割的称为线性空间

2.5 多层感知机

  感知机可以叠加层,所以可以用叠加层来表示异或门。

2.5.2 异或门的实现

  用之前定义的AND,NAND,OR函数来实现。

 1 def XOR(x1,x2):
 2     s1 = NAND(x1,x2)
 3     s2 = OR(x1,x2)
 4     y = AND(s1,s2)
 5     print(y)
 6     return y
 7 
 8 XOR(0,0)
 9 XOR(0,1)
10 XOR(1,0)
11 XOR(0,0)

 

小结

  1、感知机是具有输入和输出的算法。

  2、感知机将权重和偏执设置为参数。

  3、使用感知机可以表示与或门等逻辑电路。

  4、异或门无法用单层感知机,需要两层。

  5、单层感知机只能表示线性空间,而多层感知机可以表示非线性空间。

  6、多层感知机理论上可以表示计算机。

 

posted @ 2020-09-30 15:31  薄书  阅读(294)  评论(0编辑  收藏  举报