文章目录
- 第一章 Python基础
- (1)Python库 — numpy、matplotlib
- 第二章 感知机
- (1)从门电路了解感知机
- (2)多层感知机
- 第三章 神经网络
- (1)感知机与神经网络
- (2)什么是神经网络?
- (3)激活函数
第一章 Python基础
(1)Python库 — numpy、matplotlib
下面通过一个例子来了解Python两个重要库的使用。
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 6, 0.1)
y1 = np.sin(x)
y2 = np.cos(x)
plt.plot(x, y1, label="sin")
plt.plot(x, y2, linestyle="--", label="cos") #设置参数
plt.xlabel("x") #设置标签
plt.ylabel("y")
plt.title('sin&cos')
plt.legend()
plt.show()
第二章 感知机
我的理解:感知机就是通过分割实现分类,单层感知机是一条直线,多层感知机是多条直线叠加。
(1)从门电路了解感知机
与门
的实现:
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
return 0 if tmp <= 0 else 1
非门
的实现:
def NAND(x1, x2):
x = np.array([x1, x2])
w = np.array([-0.5, -0.5])
b = 0.7 #偏置
tmp = np.sum(w*x)+b
return 0 if tmp <= 0 else 1
或门
的实现:
def OR(x1, x2):
x = np.array([x1, x2])
w = np.array([0.5, 0.5])
b = -0.2
tmp = np.sum(w*x)+b
return 0 if tmp <= 0 else 1
1、感知机的局限性
感知机可以实现与门、与非门、或门,但不能实现异或门。因为感知机相当于在二维坐标系中画出一条直线来区分各点。
2、线性空间与非线性空间
由直线分割形成的空间成为线性空间,由曲线形成的空间称为非线性空间。
(2)多层感知机
类比数电中与非门的构成,由基础门电路叠加组成。
下面我们由基础门电路实现与非门
:
import numpy as np
def AND(x1, x2):
w1, w2, theta = 0.5, 0.5, 0.7
tmp = x1*w1+x2*w2
return 0 if tmp <= theta else 1
def NAND(x1, x2):
x = np.array([x1, x2])
w = np.array([-0.5, -0.5])
b = 0.7
tmp = np.sum(w*x)+b
return 0 if tmp <= 0 else 1
def OR(x1, x2):
x = np.array([x1, x2])
w = np.array([0.5, 0.5])
b = -0.2
tmp = np.sum(w*x)+b
return 0 if tmp <= 0 else 1
def XOR(x1, x2): #实现与非门
s1 = NAND(x1, x2)
s2 = OR(x1, x2)
y = AND(s1, s2)
return y
if __name__ == '__main__':
print(XOR(1, 1))
单层感知机无法表示的东西,通过增加一层就可以解决。感知机具有很好的灵活性
。
使用多层感知机理论构造计算机:
与或门 ->半全加器->ALU->CPU
第三章 神经网络
(1)感知机与神经网络
通过对感知机的了解我们知道理论上它可以表示更复杂的函数甚至计算机,但其设定权重的工作仍是人工处理,神经网络可以解决这一问题。
(2)什么是神经网络?
和感知机类似,可以分为三层:输入层、中间层、输出层,其中中间层也叫隐藏层
感知机中的函数:
b是表示偏置
,用于控制神经元被激活的容易程度
w表示各个信号的权重
的参数,用于控制各个信号的重要性
可将上式改为更简洁的形式:
(3)激活函数
刚才的h(x)函数会将输入信号的总和转换为输出信号,这种函数就是激活函数,激活函数是连接感知机和神经网络的桥梁。
朴素感知机:单层网络,指的是激活函数使用了阶跃函数(指一旦输入超过阈值就切换输出的函数)的模型
多层感知机:神经网络,即使用sigmoid函数等平滑的激活函数的多层网络