菜菜的深度学习笔记 | 基于Python的理论与实现(二)

菜菜的深度学习笔记 | 基于Python的理论与实现(二)

系列索引:菜菜的深度学习笔记 | 基于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。它的图像呈阶梯式变化,所以称为阶跃函数。

菜菜的深度学习笔记 | 基于Python的理论与实现(二)

(2)sigmoid函数的实现

def sigmoid(x):  # sigmoid函数之所以支持Numpy数组是因为其广播功能
    return 1/(1+np.exp(-x))

菜菜的深度学习笔记 | 基于Python的理论与实现(二)

(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的理论与实现(一)
下一篇:

本人水平有限,文章中不足之处欢迎下方

上一篇:数析三剑客 numpy pandas matplotlib 基础操作


下一篇:卡尔曼滤波的原理(Python实现)