[Python]深度学习入门-001 感知器

基本概念介绍

感知器接受多个信号输入,输出一个信号。每个信号就像电流或河流一样,流或者不流过。因此,每个感知器只有2个值:

  • 0:不流
  • 1:流

下图展示了一个有2个输入信号的感知器:

感知器

  • x1,x2代表输入信号
  • w1,w2代表输入信号的权重
  • b代表偏置
  • 圆圈被称为”神经元”或”节点

输入信号被送往神经元的时候,会分别乘以固定的权重,然后的到一个值,这个值在和偏置值相加,最终得到一个输入的值,如果这个值大于0,则输出1,否则输出0。当输出值为1的时候,我们称神经元激活

权重和偏置有不一样的意义的:

  • 权重:代表输入信号的重要程度的参数
  • 偏置:代表神经元被激活的容易程度的参数
# 一个感知器的实现(2个输入信号)
def perceptron(x1,x2,w1,w2,b):
  return 1 if x1*w1+x2*w2+b > 0 else 0  

感知器的实际应用

用感知器来实现与,或,与非,异或.

输入值 与非 异或
0,0 0 1 0 0
0,1 0 1 1 1
1,0 0 1 1 1
1,1 1 0 1 0

先看:与,与非,或的实现

# 与的实现
def AND(x1,x2):
  w1 = w2 = 0.5
  b = -0.7
  return perceptron(x1,x2,w1,w2,b)

# 与非的实现
def NAND(x1,x2):
  w1 = w2 = -0.5
  b = 0.7
  return perceptron(x1,x2,w1,w2,b)

# 或的实现
def OR(x1,x2):
  w1 = w2 = 0.5
  b = -0.4
  return perceptron(x1,x2,w1,w2,b)

# 单一的感知器并不能够实现异或操作。需要通过叠加感知器来实现异或
def XOR(x1,x2):
  a = NAND(x1,x2)
  b = OR(X1,x2)
  return AND(a,b)

从上述代码中可以看出,只要调整权重和偏置,就可以实现and,nand,or。 比如and,我调整权重为0.4,0.4,偏置调整为 -0.5 也能实现.

Numpy的导入

上述的列子只用到了2个输入信号,实际上,感知器支持多个信号输入。因此,导入numpy可以很快速的解决这个问题

import numpy as np

def perceptron(x:np.ndarray,w:np.ndarray,b):
  return 1 if np.sum(x*w)+b > 0 else 0 

def AND(x1,x2):
  x = np.array([x1,x2])
  w = np.array([0.5,0.5])
  b = -0.6
  return perceptron(x,w,b)