2-实现感知机

用Python来实现刚才的逻辑电路。

实现与门

先定义一个接收 参数x1和x2的AND(与门)函数。

def AND(x1, x2):   
    w1, w2, theta = 0.5, 0.5, 0.7   #设置参数
    tmp = x1 * w1 + x2 * w2    
    if tmp <= theta:       
        return 0    
    elif tmp > theta:        
        return 1
    
#在函数内初始化参数w1、w2、theta,当输入的加权总和超过阈值时返回1, 否则返回0
AND(0, 0) # 输出0 
AND(1, 0) # 输出0 
AND(0, 1) # 输出0 
AND(1, 1) # 输出1

果然和我们预想的输出一样!这样我们就实现了与门。

按照同样的步骤,也可以实现与非门和或门,不过让我们来对它们的实现稍作修改。

导入权重和偏置

把阈值θ换成−b,于是就可以用下面的式子来表示感知机的行为:
y = { 0 ( b + ω 1 x 1 + ω 2 x 2 ≤ 0 ) 1 ( b + ω 1 x 1 + ω 2 x 2 > 0 ) y=\begin{cases} 0&(b+ω_1x_1+ω_2x_2\leq0)\\ 1&(b+\omega_1x_1+\omega_2x_2>0) \end{cases} y={01(b+ω1x1+ω2x20)(b+ω1x1+ω2x2>0)

  • 此处,b称为偏置 ω 1 \omega_1 ω1 ω 2 \omega_2 ω2 称为权重。(注:偏置的相反数为阈值)

  • 感知机计算输入信号和权重的乘积,然后加上偏置,如果这个值大于0则输出1,否则输出0

  • 偏置和权重的作用是不 一样的。

    • 权重是控制输入信号的重要性的参数; 而偏置是调整神经元被激活的容易程度(输出信号为1的程度)的参数。

    • 比如,若b为 −0.1,则只要输入信号的加权总和超过0.1,神经元就会被激活。但是如果b 为−20.0,则输入信号的加权总和必须超过20.0,神经元才会被激活。像这样, 偏置的值决定了神经元被激活的容易程度

    注意:有时根据上下文,也会将b、w1、w2这些参数统称为权重。

接下来使用NumPy按这条公式实现感知机。在这个过程中,用Python的解释器逐一确认结果。

>>> import numpy as np 
>>> x = np.array([0, 1])     # 输入 
>>> w = np.array([0.5, 0.5]) # 权重 
>>> b = -0.7                 # 偏置 
>>> w * x 
array([ 0. ,  0.5]) 

>>> np.sum(w * x) 
0.5 

>>> np.sum(w*x) + b 
-0.19999999999999996   # 大约为-0.2(由浮点小数造成的运算误差)

使用权重和偏置的实现

实现与门:

import numpy as np
def AND(x1, x2):    
    x = np.array([x1, x2])    
    w = np.array([0.5, 0.5])   
    b = -0.7    
    tmp = np.sum(w*x) + b   
    if tmp <= 0:    
        return 0   
    else:      
        return 1

实现与非门:

def NAND(x1, x2):   
	x = np.array([x1, x2])  
	w = np.array([-0.5, -0.5]) # 仅权重和偏置与AND不同! 
	b = 0.7    
	tmp = np.sum(w*x) + b    
	if tmp <= 0:        
		return 0    
    else:        
        return 1

或门:

def OR(x1, x2):
    x = np.array([x1, x2])   
    w = np.array([0.5, 0.5]) # 仅权重和偏置与AND不同!  
    b = -0.2    
    tmp = np.sum(w * x) + b   
    if tmp <= 0:       
        return 0  
    else:      
        return 1

因为与门、与非门、或门是具有相同构造的感知机,区别只在于权重参数的值。

因此,在与非门和或门的实现中,仅设置权重和偏置的值这一点和与门的实现不同。

posted @ 2020-07-10 15:58  aJream  阅读(39)  评论(0编辑  收藏  举报