PyTorch官网demo解读——第一个神经网络(4)

news2024/11/27 19:40:41

上一篇:PyTorch官网demo解读——第一个神经网络(3)-CSDN博客

上一篇我们聊了手写数字识别神经网络的损失函数和梯度下降算法,这一篇我们来聊聊激活函数。

大佬说激活函数的作用是让神经网络产生非线性,类似人脑神经元一样,人脑神经元对输入的处理是非线性的。这个说法有些抽象,其实回到我们具体的模型中,激活函数的作用是将输出约束在某个预期的范围内,同时让输入到输出符合我们预期的分布。例如sigmod函数将输出约束在0~1之间,同时如果输入在0周围,输出的差异比较大,如果输入偏离0较多,则输出的差异就比较小。

代码解读

# 激活函数
def log_softmax(x):
    return x - x.exp().sum(-1).log().unsqueeze(-1)

完整代码请参见第一篇

demo代码中使用了一个自定义的log_softmax激活函数,其实这并不是一个标准的log_softmax函数,标准的log_softmax函数如下(来自PyTorch官网):

对以上公式进行一波推导得出(参见推导原文):

对比上面的代码发现代码里面的实现是没有减去M的,但这样也是可行的。

替换激活函数

单单看上面代码的激活函数有时候不是很好理解为什么这样做,不要激活函数可以吗?用其它激活函数又如何呢?下面我们就动手来捣鼓一下,看看换几个其它的激活函数会怎样?

首先我们把原来用log_softmax作为激活函数的结果跑出来,方便后面做对比:

接下来我们就来替换几个激活函数看看效果。

1. 替换成softmax函数

代码:

def softmax(x):
    return x.exp() / x.exp().sum(-1).unsqueeze(-1)

运行结果:

分析:

使用softmax函数训练出来的模型精度略逊于log_softmax,但不会相差太多。为什么呢?可以留言发表看法。

2. 替换成sigmod函数

代码:

def sigmod(x):
    return 1 / (1 + (-x).exp())

运行结果:

分析:

使用sigmod函数作为激活函数训练出来的模型精度只有0.6094,比使用log_softmax差很多,说明sigmod函数不能作为分类问题模型的激活函数

3. 替换成tanh函数

代码:

def tanh(x):
    p_exp = x.exp()
    n_exp = (-x).exp()
    return (p_exp - n_exp) / (p_exp + n_exp)

运行结果:

分析:

使用tanh函数作为模型的激活函数,训练出来精度为0.7188,比使用sigmod函数稍微好点,但比log_softmax还是差太多,所以tanh函数同样不适合作为分类问题模型的激活函数

总结

通过替换不同类型的激活函数,我们可以从侧面看出激活函数对于模型的重要性,也引起我们对激活函数的思考,算是抛砖引玉吧。在其它模型中如何选择激活函数呢?让我们共同学习!

如切如磋,如琢如磨!

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

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

相关文章

Delphi6函数大全4-SysUtils.pas

Delphi6函数大全4-SysUtils.pas首部 function FormatFloat(const Format: string; Value: Extended): string; $[SysUtils.pas功能 返回浮点数类型以指定格式字符串Format转换成字符串说明 FormatFloat(,.00, 1234567890) 1,234,567,890.00参考 function …

[SSD 测试 1.3] 消费级SSD全生命周期测试

依公知及经验整理,原创保护,禁止转载。 专栏 《深入理解SSD》 <<<< 返回总目录 <<<< 构建消费级SSD全生命周期测试,开展性能测试、兼容性测试、功能测试、环境应力测试、可靠性测试、电器检测。 以忆联消费级存储实验室为例,消费级存储实验室面积…

思维链COT原理探究

要进行因果分析&#xff0c;需要把思维链中的不同元素拆解开来&#xff0c;然后通过控制变量实验&#xff0c;来研究不同元素对COT效果的影响。以下两篇论文的核心差异就在于: COT的变量拆解&#xff0c;以及控制变量的实验方式。 结合两篇论文的实验结论&#xff0c;可能导致…

Java技术栈 —— Redis的雪崩、穿透与击穿

Java技术栈 —— Redis的雪崩、穿透与击穿 〇、实验的先导条件&#xff08;NginxJmeter&#xff09;一、Redis缓存雪崩、缓存穿透、缓存击穿1.1 雪崩1.2 穿透1.3 击穿 二、Redis应用场景——高并发2.1 单机部署的高并发问题与解决&#xff08;JVM级别锁&#xff09;2.2 集群部署…

RK3568平台 Android13 GKI架构开发方式

一.GKI简介 GKI&#xff1a;Generic Kernel Image 通用内核映像。 Android13 GMS和EDLA认证的一个难点是google强制要求要支持GKI。GKI通用内核映像&#xff0c;是google为了解决内核碎片化的问题&#xff0c;而设计的通过提供统一核心内核并将SoC和板级驱动从核心内核移至可加…

29 UVM Command Line Processor (CLP)

随着设计和验证环境的复杂性增加&#xff0c;编译时间也增加了&#xff0c;这也影响了验证时间。因此&#xff0c;需要对其进行优化&#xff0c;以便在不强制重新编译的情况下考虑新的配置或参数。我们已经看到了function or task如何基于传递参数进行行为。类似地&#xff0c;…

30 UVM Adder Testbench Example

1 Adder Design 加法器设计在时钟的上升沿产生两个变量的加法。复位信号用于clear out信号。注&#xff1a;加法器可以很容易地用组合逻辑开发。引入时钟和重置&#xff0c;使其具有测试台代码中时钟和重置的样子/风格。 module adder(input clk, reset, input [7:0] in1, in…

BikeDNA(二) OSM数据的内在分析1

BikeDNA&#xff08;二&#xff09; OSM数据的内在分析1 该笔记本分析给定区域的 OSM 自行车基础设施数据的质量。 质量评估是“内在的”&#xff0c;即仅基于一个输入数据集&#xff0c;而不使用外部信息。 对于将 OSM 数据与用户提供的参考数据集进行比较的外在质量评估&…

Halcon闭运算closing

Halcon闭运算 文章目录 Halcon闭运算 闭运算的计算步骤&#xff0c;为先膨胀&#xff0c;后腐蚀。这两步操作能将看起来很接近的元素&#xff0c;如区域内部的空洞或外部孤立的点连接成一体&#xff0c;区域的外观和面积也不会有明显的改变。通俗地说&#xff0c;就是类似于“填…

金蝶云星空其他出库单,审核中/审批流中可以选择序列号设置

文章目录 其他出库单&#xff0c;审核中&#xff0c;审批流中可以选择序列号设置 其他出库单&#xff0c;审核中&#xff0c;审批流中可以选择序列号设置

2023 总结:我在上海做程序员的第八年

文章目录 生活举办了婚礼拿到上海户口输出的数据看书还不够 赚钱工作副业 专业技术开源图片分析工具 AndroidBitmapMonitor成为谷歌开发者专家学习的终极目的 健康总结历史总结 大家好&#xff0c;我是拭心。 这篇文章里&#xff0c;我将从生活、赚钱、专业技术、健康几方面总…

Oracle-深入了解cache buffer chain

文章目录 1.Cache buffer chain介绍2.Buffer cache的工作原理3 Buffer chains4.Multi-versioning of Buffers5.Latches6.诊断CBC latch等待7.解决 CBC Latch等待 1.Cache buffer chain介绍 经常看到会话等待事件“latch&#xff1a;cache buffers chain”。 如果想知道意味着什…

Ubuntu安装FSearch

文章目录 简介安装配置Fsearch的搜索路径参考资料 简介 Fsearch是Ubuntu等Linux系统中用于文件快速搜索的软件&#xff0c;类似于Windows系统中的Everything。下面介绍如何在Ubuntu系统中安装并使用Fsearch&#xff0c;只需简单几步&#xff01;&#x1f3c3;&#x1f3c3; 安…

力扣LeetCode第26题 删除有序数组中的重复项

一、题目 给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 示例 1&#xff1…

C++使用MINGW64集成Direct3D开发环境

霸王•吕布 / MinCPlusCompiler GitCodewindows mingw64 c简易开发编译工具,集成Direct3D FMOD Cmake编译工具https://gitcode.net/qq_35829452/mincpluscompiler 一.MINGW64编译器 gcc.exe C语言编译器g.exe C语言编译器mingw32-make.exe -j 4 CMake编译工具 二.MINGW64编…

Dungeon Scrawl——在线虚拟世界地图制作器

今天带来一款十分有趣的地图应用&#xff0c;同样也是在线地图工具&#xff0c;如果我们想要制作此类风格的地图&#xff0c;这款工具定能助我们一臂之力。 按照惯例先给出网址&#xff1a; Dungeon Scrawl | Free Online D&D Map Maker 进入网站&#xff0c;点击Start S…

CSS 缩减顶部动画

<template><!-- mouseenter"startAnimation" 表示在鼠标进入元素时触发 startAnimation 方法。mouseleave"stopAnimation" 表示在鼠标离开元素时触发 stopAnimation 方法。 --><!-- 容器元素 --><div class"container" mou…

华为模拟器eNSP报警提示解决办法

新安装的华为模拟器eNSP 启动交换机或路由器等设备是经常出现配置更改的提示&#xff0c;是不是很烦&#xff1f; Dec 29 2023 10:46:04-08:00 Huawei DS/4/DATASYNC_CFGCHANGE:OID 1.3.6.1.4.1.2011.5 .25.191.3.1 configurations have been changed. The current change nu…

设计模式—单例模式 / DCL失效问题 / 暴力破解单例 (反射/序列化)

单例模式 杂谈 前提饿汉模式&#xff1a;懒汉模式&#xff1a; 线程不安全线程安全 双重锁懒汉模式(Double Check Lock)静态内部类模式枚举单例 杂谈 和同学在聚会的时候聊起设计模式&#xff0c;聊完之后发现我对自己的设计模式的看法貌似存在误解&#xff0c;当我看到设计…

00-开篇导读:学习分库分表开源框架的正确方法

1 前言 互联网高速发展带来海量的信息化数据&#xff0c;也带来更多的技术挑战。各种智能终端设备&#xff08;比如摄像头或车载设备等&#xff09;以每天千万级的数据量上报业务数据&#xff0c;电商、社交等互联网行业更不必说。这样量级的数据处理&#xff0c;已经远不是传…