系列索引:菜菜的深度学习笔记 | 基于Python的理论与实现
文章目录
一、激活函数
阶跃函数
:以阈值为界,一旦超过阈值就切换输出
感知机使用阶跃函数作为激活函数
,如果将阶跃函数换成其他函数,那么就进入神经网络的世界了。
神经网络中用sigmoid函数作为激活函数,进行信号的转换,转换后的信号被传送到下一个神经元。
感知机和神经网络的区别就在于激活函数。
(1)阶跃函数的实现
import numpy as np
import matplotlib.pyplot as plt
def step_function(x): # 阶跃函数
y = x > 0
return y.astype(np.int)
x = np.arange(-5.0, 5.0, 0.1)
y = step_function(x)
plt.plot(x, y)
plt.ylim(-0.1, 1.1)
plt.show()
在-5到5的范围内,以0.1为单位生成Numpy数组,限制y的取值在-0.1 - 1.1。它的图像呈阶梯式变化,所以称为阶跃函数。
(2)sigmoid函数的实现
def sigmoid(x): # sigmoid函数之所以支持Numpy数组是因为其广播功能
return 1/(1+np.exp(-x))
(3)阶跃函数和sigmoid函数对比
sigmoid函数是一条平滑的曲线,输出随着输入发生连续的变化。其平滑性对于神经网络的学习具有重要意义。
相对于阶跃函数只能返回0或1,sigmoid函数能返回小数,即感知机中神经元之间流动的是0或1的二元信号,而神经网络中流动的是连续的实数值信号。
(4)非线性函数
激活函数
不能使用线性函数,使用线性函数的话加深神经网络的层数就没什么意义了。
线性函数的问题在于不管如何加深层数总存在与之等效的“无隐藏层的神经网络”
如:激活函数h(x) = cx,y=h(h(h(x))),即y=c^3x,等效于y = ax。
(5)ReLU函数
ReLU函数:当输入大于0时直接输出该值,输入小于等于0时输出0。
def relu(x):
return np.maximum(0,x)
二、多维数组的运算
(1)矩阵的乘积
np.dot(a,b):计算AB矩阵的乘积(点积)
A x B = C
3x2 - 2x4 - 3x4,A的列与B的行保持一致
(2)神经网络的内积
import numpy as np
X = np.array([1, 2])
W = np.array([[1, 3, 5], [2, 4, 6]])
Y = np.dot(X, W)
print(Y)
基于Python的理论与实现 系列持续更新,欢迎
点赞收藏
+关注
上一篇:菜菜的深度学习笔记 | 基于Python的理论与实现(一)
下一篇:
本人水平有限,文章中不足之处欢迎下方