第3章 神经网络
3.2.2 阶跃函数的实现
import numpy as np
def step_function(x):
y = x > 0
return y.astype(np.int)
x = np.array([-1.0, 1.0, 2.0])
x
array([-1., 1., 2.])
y = step_function(x)
y
array([0, 1, 1])
import matplotlib.pylab as plt
x = np.arange(-5.0, 5.0, 0.1) # 定义一个-5到5的等差数列0.1的数据
y = step_function(x)
plt.plot(x, y)
plt.ylim(-0.1, 1.1) # 指定y轴的范围
plt.show()
3.2.4 sigmoid函数的实现
def sigmoid(x):
return 1 / (1 + np.exp(-x))
x = np.array([-1.0, 1.0, 2.0])
x
array([-1., 1., 2.])
y = sigmoid(x)
y
array([0.26894142, 0.73105858, 0.88079708])
x = np.arange(-5.0, 5.0, 0.1)
y = sigmoid(x)
plt.plot(x, y)
plt.ylim(-0.1, 1.1) # 指定y轴的范围
plt.show()
3.2.5 sigmoid 函数和阶跃函数的比较
x = np.arange(-5.0, 5.0, 0.1)
y1 = sigmoid(x)
y2 = step_function(x)
plt.plot(x, y1)
plt.plot(x, y2)
plt.ylim(-0.1, 1.1) # 指定y轴的范围
plt.show()
相对于阶跃函数只能返回0 或1,sigmoid 函数可以返回0.731 . . .、0.880 . . . 等实数(这一点和刚才的平滑性有关)
两者的结构均是“输入小时,输出接近0(为0);随着输入增大,输出向1 靠近(变成1)”。
不管输入信号有多小,或者有多大,输出信号的值都在0 到1 之间。
3.2.7 ReLU函数
def relu(x):
return np.maximum(0, x) # maximum函数会从输入的数值中选择较大的那个值进行输出
y = relu(x)
plt.plot(x, y)
plt.show()
3.3 多维数组的运算
如果掌握了NumPy多维数组的运算,就可以高效地实现神经网络。因此,本节将介绍NumPy多维数组的运算,然后再进行神经网络的实现。
3.3.2 矩阵乘法
A = np.array([[1,2], [3,4]])
A.shape
(2, 2)
B = np.array([[5,6], [7,8]])
B.shape
(2, 2)
np.dot(A, B) # np.dot()接收两个NumPy数组作为参数,并返回数组的乘积
array([[19, 22],
[43, 50]])
A = np.array([[1,2], [3, 4], [5,6]])
B = np.array([7,8])
np.dot(A, B)
array([23, 53, 83])
B2 = np.array([[7,8], [7, 8]])
np.dot(A, B2)
array([[21, 24],
[49, 56],
[77, 88]])
注意:np.array()方法按列表的元素(可以为单个数值或者列表)的按列进行排列
如:A = np.array([[1,2], [3, 4], [5,6]]) 按照列表[1, 2]…依次按列组合
B = np.array([7,8])按照数值7…依次按列组合