深度学习基础--神经网络(1)激活函数

news2025/7/11 1:46:01

文章目录

    • 从感知机到神经网络
    • 激活函数
      • 阶跃函数(感知机的激活函数)
      • sigmoid函数
      • 阶跃函数和sigmoid函数绘制和对比
      • ReLU函数

本文为学习笔记

参考书籍:《深度学习入门 : 基于Python的理论与实现 》/ (日) 斋藤康毅著 ; 陆宇杰译. – 北京 : 人民邮电出版社, 2018.7(2019.5重印)、

文章中带文字的图片(如:图3-4)均来自书籍内容。

从感知机到神经网络

激活函数

前面文章中深度学习基础-感知机的函数的表示:
y = { 0 , ( b + w 1 x 1 + w 2 x 2 ≤ 0 ) 1 , ( b + w 1 x 1 + w 2 x 2 > 0 ) (3.1) y=\left\{ \begin{aligned} 0,(b+w_1x_1+w_2x_2 \le 0) \\ 1,(b+w_1x_1+w_2x_2 > 0) \\ \end{aligned} \right. \tag{3.1} y={0,(b+w1x1+w2x20)1,(b+w1x1+w2x2>0)(3.1)
将式子(3.1)用一个函数 h ( x ) h(x) h(x)来表示这种分情况的动作:
y = h ( b + w 1 x 1 + w 2 x 2 ) (3.2) y = h(b+w_1x_1+w_2x_2) \tag{3.2} y=h(b+w1x1+w2x2)(3.2)

h ( x ) = { 0 , ( x ≤ 0 ) 1 , ( x > 0 ) (3.3) h(x)=\left\{ \begin{aligned} 0,(x\le 0)\\ 1,(x>0)\\ \end{aligned} \right. \tag{3.3} h(x)={0,(x0)1,(x>0)(3.3)

h ( x ) h(x) h(x)函数一般称为激活函数,其作用在于如何来激活输入信号的总和

式(3.2)的两个阶段:

  1. 计算输入信号的加权总和
  2. 激活函数转换这一总和

式(3.2)可以拆分:
a = b + w 1 x 1 + w 2 x 2 (3.4) a = b + w_1x_1 + w_2x_2 \tag{3.4} a=b+w1x1+w2x2(3.4)

y = h ( a ) (3.5) y=h(a) \tag{3.5} y=h(a)(3.5)

在图中表示:

请添加图片描述

信号的加权总和为节点a,然后节点a被激活函数 h ( ) h() h()转换为节点 y y y

在这里插入图片描述

阶跃函数(感知机的激活函数)

h ( x ) = { 0 , ( x ≤ 0 ) 1 , ( x > 0 ) (3.3) h(x)=\left\{ \begin{aligned} 0,(x\le 0)\\ 1,(x>0)\\ \end{aligned} \right. \tag{3.3} h(x)={0,(x0)1,(x>0)(3.3)

式子(3.3)表示的激活函数以阈值为界,一旦输入超过阈值,就切换输出。这样的函数称为阶跃函数

阶跃函数实现:

import numpy as np


def step_function(x):
    """阶跃函数"""
    y = x > 0  # 如果传入NumPy数组x,y会是一个布尔型的数组
    return y.astype(np.int)  # astype()方法转换NumPy数组的类型,将y数组中的布尔值转为int型


demo = np.array([1, -1, 3])
# y = demo > 0  # [ True False  True]
# print(y)
result = step_function(demo)
print(result)  # [1 0 1]

阶跃函数绘制:

import numpy as np
import matplotlib.pyplot as plt


def step_function2(arr):
    """阶跃函数"""
    return np.array(arr > 0, dtype=np.int)  # 直接判断传入的形参大小并转换为int型的结果:0或1


x = np.arange(-5.0, 5.0, 0.1)  # 从-5.0到5.0每隔0.1取一个值
y = step_function2(x)  # 将x数组传入阶跃函数,每个值对应的结果保存在y数组

plt.plot(x, y)  # 绘制(x, y)函数图像
plt.title("Step function")  # 图的名称
plt.xlabel("x")  # 横轴名称
plt.ylabel("y")  # 纵轴名称
plt.ylim(-0.1, 1.1)  # 纵轴的范围
plt.show()  # 展示图像

运行结果:

在这里插入图片描述

阶跃函数以0为界,输出从0切换到1,呈阶梯式变化。

sigmoid函数

h ( x ) = 1 1 + e − x (3.6) h(x) = \frac{1}{1+e^{-x}} \tag{3.6} h(x)=1+ex1(3.6)

代码实现:

import numpy as np
import matplotlib.pyplot as plt


def sigmoid(x):
    """sigmoid激活函数"""
    return 1 / (1 + np.exp(-x))


demo = np.arange(-5.0, 5.0, 0.1)
result = sigmoid(demo)

plt.plot(demo, result)
plt.title("Sigmoid")
plt.xlabel("x")
plt.ylabel("y")
plt.ylim(-0.1, 1.1)
plt.show()

运行结果:

在这里插入图片描述

阶跃函数和sigmoid函数绘制和对比

import numpy as np
import matplotlib.pyplot as plt
from sigmoid import sigmoid


def step_function2(arr):
    """阶跃函数"""
    return np.array(arr > 0, dtype=np.int)  # 直接判断传入的形参大小并转换为int型的结果:0或1


x = np.arange(-5.0, 5.0, 0.1)  # 从-5.0到5.0每隔0.1取一个值
y = step_function2(x)  # 将x数组传入阶跃函数,每个值对应的结果保存在y数组
y1 = sigmoid(x)

plt.plot(x, y, label="step")  # 绘制(x, y)step函数图像
plt.plot(x, y1, linestyle="--", label="sigmoid", )  # 绘制(x, y)sigmoid函数图像
plt.title("Step function & Sigmoid")  # 图的名称
plt.xlabel("x")  # 横轴名称
plt.ylabel("y")  # 纵轴名称
plt.ylim(-0.1, 1.1)  # 纵轴的范围
plt.legend()  # 设置图例的相关设置
plt.show()  # 展示图像

运行结果:

在这里插入图片描述

二者对比:

  • 不同点:

    1. 平滑性不同,sigmoid是平滑曲线,输出随输入发生连续性变化;step是以0为界,输出发生急剧性变化。
    2. 返回值不同,sigmoid可以返回实数,0.731、0.456…;step只能返回0或者1。
  • 相同点:

    1. 两者输入较小时接近0(为0),输入较大时接近1(为1)。

    2. 输出信号都在0和1之间

    3. 二者均为非线性函数

      线性函数:是一条笔直的直线

神经网络的激活函数必须使用非线性函数

神经网络的激活函数必须使用非线性函数

神经网络的激活函数必须使用非线性函数

ReLU函数

ReLU: Rectified Linear Unit

在输入大于0时,直接输出该值;在输入小于等于0时,输出0。

公式:
h ( x ) = { x , ( x > 0 ) 0 , ( x ≤ 0 ) (3.7) h(x) = \left\{ \begin{aligned} x,(x>0)\\ 0,(x\le 0) \end{aligned} \right. \tag{3.7} h(x)={x,(x>0)0,(x0)(3.7)
代码实现:

import numpy as np
import matplotlib.pyplot as plt


def relu(x):
    """ReLU函数"""
    return np.maximum(0, x)  # maximum从输入的值中选较大的值输出


a = np.arange(-5.0, 5.0, 0.1)
y = relu(a)

"""绘图"""
plt.plot(a, y)
plt.title("ReLU")
plt.xlabel("x")
plt.ylabel("y")
plt.ylim(-1.0, 5.0)
plt.show()

运行结果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/8878.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

根据水声和摄影测量数据建立数字测深模型

无人船和无人车正越来越多地用于水深地形测量。使用这些平台采集数据的技术得到普遍的应用,但数据的融合仍然需要深入研究,其融合方法通常依赖于所使用的传感器和测量区域的特性。本文提出了一种融合无人艇(USV)和无人机&#xff…

[附源码]java毕业设计基于的前端课程学习网站

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Mybatis—SqlNode

SqlNode的主要职责就是描述Mapper文件中配置的SQL信息,在Mybatis源代码中随处都能看见其身影,可见SqlNode地位是相当高的。SqlNode接口只定义了一个apply方法,且该方法只有一个DynamicContext对象作为入参。DynamicContext对象中不仅封装了Ma…

抓包工具 Charles 使用手册

Charles 是一款抓包软件,通过代理的形式拦截所有的 HTTP 和 HTTPS 请求,是开发测试的一大利器 下载和激活 在 Charles 下载安装包,在 此处 获得注册码,点击下方输入注册码激活软件 抓主机的 HTTP 包 选中 Proxy > Windows P…

第五章 数组和广义表

数组和广义表 5.1多维数组 5.1.1数组的逻辑结构 数组是我们熟悉的一种数据结构,可以看作线性表的推广。 数组作为一种数据结构其特点是结构中的元素本身可以是具有某种结构的数据,但属于同一类型。比如:一维数组可以看作一个线性表&#…

NDepend v2022.2.1.9665 专业版

NDepend 基本上被描述为.NET 托管代码的静态分析工具。这个特定的工具能够支持大量代码度量,允许使用直接图和依赖矩阵来可视化依赖关系。 NDepend 工具还能够通过架构验证过程以及规则及其质量为用户和开发人员执行基于代码的快照比较。有些规则基本上是用户定义的…

联想中国上半财年业绩:转型深入 方案服务同比增24%

11月15日,联想中国举办2022/23财年上半财年工作总结会。会上透露,联想中国经受住诸多不利因素的考验,PC市场份额保持稳定,3S新业务(3S指智能设备、智能基础设施和方案服务)顽强成长、收入占比达到28.6%&…

MCE 虚拟筛选、小分子化合物库

CNS Library &#xff08;含 47,040 种化合物&#xff09;高血脑屏障穿透率的小分子化合物数据库 CNS library 精选具有低极性表面积(TPSA< 70 2)、低 ClogP (平均为1.63)、低氢键形成程度(氢键供体和受体的总数小于 8 )、低 MW(平均为283) 等具有高血脑屏障穿透率的化合物…

css毛玻璃效果/el-progress进度条渐变/axios的基本使用/跨域配置/关闭eslint验证

css磨砂效果 效果图 实现方法 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content&qu…

NNG pair 异步通信

一&#xff0c;利用NNG pair模式&#xff0c;实现异步通信。 二&#xff0c;manager端 绑定地址&#xff0c;回调函数里 接收 异步消息&#xff1a; #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <…

HTTP协议中Gzip格式的流量分析与识别

背景 在协议分析过程中&#xff0c;经常会发现gzip压缩的数据&#xff0c;例如在HTTP协议中&#xff0c;在HTTP头中会标示&#xff0c;内容编码为gzip、DEFLATE。 但是&#xff0c;还有很多情况&#xff0c;例如一些非HTTP协议&#xff0c;特别是私有协议中&#xff0c;数据同…

强大的图片处理工具GraphicsMagick

前言 项目中我们经常需要对图片进行压缩、剪切、添加水印、生成缩略图、图片合成等图片处理操作&#xff0c;关于这些图片复杂处理&#xff0c;我们将如何实现呢&#xff0c;本文将介绍GraphicsMagick对图片进行相关处理功能。 简介 GraphicsMagick是一个免费的创建、编辑、…

16.Redis系列之Redisson分布式锁原理

本文学习Redisson分布式锁的原理以及优缺点 1. Redisson分布式锁原理 lua脚本是原子操作&#xff0c;redis会将整个脚本作为一个整体执行&#xff0c;中间不会被其他命令打断 # RedissonLock.tryLockInnerAsync方法内lua脚本加锁 <T> RFuture<T> tryLockInnerAs…

代码随想录算法训练营第三十四天| LeetCode1005. K 次取反后最大化的数组和、LeetCode134. 加油站、LeetCode135. 分发糖果

一、LeetCode1005. K 次取反后最大化的数组和 1&#xff1a;题目描述&#xff08;1005. K 次取反后最大化的数组和&#xff09; 给你一个整数数组 nums 和一个整数 k &#xff0c;按以下方法修改该数组&#xff1a; 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。重复这个过…

TNF 又见 《Cell》

现有的研究表明&#xff0c;需要新的机会来增加免疫检查点封锁&#xff08;Immunecheckpoint blockade&#xff0c;ICB&#xff09;的影响。尽管干扰素&#xff08;IFN&#xff09;γ途径同时具有 ICB 抗性因子和治疗机会&#xff0c;但至今为止&#xff0c;研究人员尚未系统地…

采用新项目管理软件的四个步骤

这是采用新项目管理软件的有趣之处&#xff1a;它本身实际上是一个重大项目&#xff0c;而且您的组织越大&#xff0c;这个过程就越艰巨。 当然&#xff0c;成功的项目管理实施最终将有助于简化您的运营并最大限度地提高跨部门的效率——这有利于团队成员的士气、客户满意度…

国内外的免费AI作图工具

1.文心一格 文心一格 - AI艺术和创意辅助平台 “推荐”页面操作比较简单&#xff0c;只需要需要简单的一句话&#xff0c;等几分钟就可以直接生成&#xff1a; 主要可以用来生成不同“氛围感”十足的场景&#xff1a; 美丽的花田&#xff1a; 优点&#xff1a; 1.比较容易…

【数据结构】—— 二叉树(C)

二叉树 文章目录二叉树二叉树的概念&#xff1a;树的术语二叉树的大概样式先序创建二叉树二叉树的遍历方式先序遍历中序遍历后序遍历二叉树的概念&#xff1a; 二叉树&#xff08;Binary Tree&#xff09;是n(n>0)个结点的有限集合&#xff0c;该集合或者为空集&#xff08…

bugku-web-安慰奖

题目没给提示 点开链接 是空白页面 查看源代码 base64加密 拿去解码 备份文件 使用工具跑一下目录 &#xff08;dirsearch) 存在一个flag.php文件 但是访问没有结果 锁定index.php.bak 文件 下载下来 打开 进行代码审计 是php序列化 反序列化的内容 代码审计&…

【Python】Numpy生成坐标网格

文章目录meshgridmgrid和ogridindicesmeshgrid 在三维图的绘制过程中&#xff0c;一般需要x,y,zx,y,zx,y,z之间的对应关系&#xff0c;但对于图像而言&#xff0c;其x,yx,yx,y轴坐标是体现在像素栅格中的&#xff0c;从而图像矩阵中的像素强度&#xff0c;其实表示的是zzz轴的…