读书记录

收获:

  • 对matplotlib、numpy有了初步认识

  • 了解了一些基础概念

  • 跟随书本实现了简单的逻辑门电路

  • 认识了感知机、激活函数

numpy:

1
2
3
4
5
6
import numpy as np
x = np.array([1.0,2.0,3.0]) #生成数组
print(x)
print(x.dtype) #查看数据类型
print(x.shape) #查看矩阵形状
x = x.flatten() #将矩阵转换为一维数组

matplotlib

1
2
3
4
5
6
7
8
9
10
import matplotlib.pyplot as plt
from matplotlib.image import imread

x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
plt.plot(x, y) #绘制图形
plt.show() #显示坐标系

img = imread("lena.png")
plt.imshow(img) #显示图像

基础概念

  • 广播:将与矩阵相乘的标量转换为相应大小矩阵的功能
  • 张量:一般化之后的向量或矩阵
  • 感知机:感知机(perceptron)是二类分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别。

简单逻辑门的实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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
elif tmp > 0:
return 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
if tmp <= 0:
return 0
elif tmp > 0:
return 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
if tmp <= 0:
return 0
elif tmp > 0:
return 1

def XOR(x1, x2):
s1 = NAND(x1, x2)
s2 = OR(x1, x2)
y = AND(s1, s2)
return y

感知机

感知机的局限性

​ 单层感知机只能表示线性空间

多层感知机的优势

  • 多层感知机可以实现非线性空间
  • 使用了非线性函数sigmoid作为激活函数的2层感知机可以表示任意函数

激活函数

定义:将输入信号的总和转换为输出信号的函数

  • sigmoid函数:
    $$
    h(x) = \frac{1}{(1+e^{-x})}
    $$

  • 阶跃函数:

    1
    2
    3
    4
    5
    def step_function(x):
    if x > 0:
    return 1
    else:
    return 0

    或者

    1
    2
    3
    def step_function(x):
    y = x > 0
    return y.astype(np.int)
  • ReLU函数
    $$
    h(x)=
    \begin{cases}
    x (x>0)\
    0 (x\leq0)\
    \end{cases}
    $$

  • 恒等函数

  • softmax函数
    $$
    y_k=\frac{e^}{\sum_{i=1}^ne^{a_i}}
    $$

评论