深度学习入门基于python的理论与实现-第三章神经网络(个人向笔记)

本文详细介绍了激活函数在神经网络中的作用,包括阶跃函数、sigmoid函数和ReLU函数的特点和适用场景。通过实例展示了如何在三层神经网络中实现,以及如何通过softmax函数设计输出层。此外,文章还提及了手写数字识别MINIST数据集的应用,并讨论了神经网络推理过程中的批处理优化策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

激活函数

激活函数是连接感知机和神经网络的桥梁

阶跃函数

阶跃函数是在感知机中使用的激活函数。
h ( x ) = { 0 x < 0 1 x > = 0 h(x)=\begin{cases} 0 \quad x<0\\ 1 \quad x>=0\\ \end{cases} h(x)={ 0x<01x>=0

图像:
image

实现

import numpy as np


def step_function(x):
    y = x > 0
    return y.astype(np.int)


print(step_function(np.array([1, -1, 1, 3, -3, -4])))

sigmoid函数

h ( x ) = 1 1 + e − x h(x)=\frac{1}{1+e^{-x}} h(x)=1+ex1
其中 e = 2.7182... e=2.7182... e=2.7182...是纳皮尔常数。
图像:
image

实现

import numpy as np
import matplotlib.pyplot as plt


# numpy array具有广播功能
def sigmoid(x):
    return 1 / (1 + np.exp(-x))


# x = np.arange(-5, 5, 0.1)
# y = sigmoid(x)
# plt.plot(x, y)
# plt.ylim(-0.1, 1.1)
# plt.show()

在感知机中使用的是阶跃函数,在神经网络中我们引入了sigmoid函数。
可以先比较两种函数
从两方面去比较
不同点:

  1. 平滑性:阶跃函数是不平滑的,sigmoid函数是平滑的
  2. 返回值:阶跃函数只能返回两种值0|1,sigmoid可以返回的值是[0,1]之间的实数
    相同点:
  3. 从宏观上去看,两者的趋势比较一致或者说形状吧
  4. 两者均属于非线性函数

神经网络中的激活函数必须使用非线性函数。
为什么呢?
可以考虑使用线性函数,我们知道神经网络是一层一层这样叠加下去,使用线性函数的话,无论叠加多少层,到最后我们的函数都可以等价为只使用一个等价的线性函数

ReLU函数

h ( x ) = { 0 x < 0 x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值