激活函数ReLU,Sigmoid,tanh,softmax性质讲解及使用matplotlib绘制

news2024/10/2 10:14:46

Sigmoid及tanh

sigmoid及tanh的函数图像较为相似,它们的公式如下

Sigmoid公式

\sigma(x) = \frac{1}{1 + e^{-x}}

tanh公式

\tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}

Sigmoid及tanh性质解析

Sigmoid和tanh作为激活函数都可以有效完成非线性映射的功效,其中Sigmoid经常作为2分类的神经网络的输出层的激活函数,由于其非线性映射会将输出值转换到0-1的区间内.

但是Sigmoid和tanh也有一定的缺陷,在值偏离0较多的时候,这两者的导数会越发近似于0,也就会造成梯度连乘后梯度消失的现象

Sigmoid及tanh函数图像及导数绘制

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import torch
import torch.nn.functional as F

if __name__ == '__main__':
    device = torch.device('mps' if torch.backends.mps.is_available() else 'cpu')
    x = torch.linspace(-20,20,200, requires_grad=True,device=device)
    x1 = torch.linspace(-20,20,200, requires_grad=True,device=device)
    y = F.sigmoid(x)
    y1 = F.tanh(x1)
    fig = plt.figure()
    axes1 = plt.subplot(221)
    axes2 = plt.subplot(223)
    axes3 = plt.subplot(222)
    axes4 = plt.subplot(224)
    axes1.plot(x.cpu().detach(),y.cpu().detach())
    axes2.plot(x.cpu().detach(),y1.cpu().detach())
    axes1.set_title('sigmoid')
    axes2.set_title('tanh')
    axes1.set_xlabel('x')
    axes1.set_ylabel('y')
    axes2.set_xlabel('x')
    axes2.set_ylabel('y')
    axes1.grid()
    axes2.grid()

    y.sum().backward()
    y1.sum().backward()
    axes3.plot(x.cpu().detach(),x.grad.cpu().detach())
    axes4.plot(x1.cpu().detach(),x1.grad.cpu().detach())
    print(x.grad)
    print(x1.grad)

    fig.savefig('sig_tanh.png')
    plt.show()

可以看到使用matplotlib绘制的时候,由于需要使用张量绘制,有两个注意点

1.可以注意到这里的张量是存储在gpu上的,但是gpu上的张量不支持直接转换为ndarray形式绘制(由于matplotlib底层会默认将参数转换为ndarray进行绘制),所以需要使用.cpu()将张量转换到cpu上

2.在使用plot绘图的时候,需要注意要使用detach()将这里的张量从计算图上切割下来,确保会吐函数不会干扰计算图

ReLU

ReLU公式

\text{ReLU}(x) = \max(0, x)

ReLU性质解析

可以看到ReLU只是一个简单的max()求最大值函数,效益主要有两个

1.首先,当值大于0的时候,输出值不变,也就是导数为1,由此可加速梯度计算

2.当值小于等于0的时候,输出值会变为0,也就是神经元会失效,一定程度上可以完成类似正则化的效果

ReLU的由来

ReLU 激活函数在 2012 年ImageNet Large Scale Visual Recognition Challenge (ILSVRC) 上被 AlexNet 模型成功应用,大幅提高了图像分类的准确率,也标志着卷积神经网络的进步

ReLU函数图像及导数绘制

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import torch
import torch.nn.functional as F

if __name__ == '__main__':
    device = torch.device('mps' if torch.backends.mps.is_available() else 'cpu')
    x = torch.linspace(-20,20,200, requires_grad=True,device=device)
    y = F.relu(x)
    y.sum().backward()
    fig = plt.figure()
    axes1 = plt.subplot(121)
    axes2 = plt.subplot(122)
    axes1.plot(x.cpu().detach(),y.cpu().detach())
    axes1.grid()
    axes1.set_title('ReLU')
    axes1.set_xlabel('x')
    axes1.set_ylabel('y')
    axes2.plot(x.cpu().detach(),x.grad.cpu().detach())
    axes2.grid()
    axes2.set_title('Gradient')
    axes2.set_xlabel('x')
    axes2.set_ylabel('y')
    fig.savefig('relu.png')
    plt.show()

Softmax

Softmax公式

\sigma(\mathbf{z})i = \frac{e^{z_i}}{\sum{j=1}^{N} e^{z_j}}

Softmax性质分析

Softmax常用于多分类问题的输出层的激活,Softmax的输出结果一般将神经网络最后输出的logits分数,根据Softmax激活后,会转化为和为1的序列,根据为底数为e的指数运算,e^x会将logits值较小的继续缩小,logits较大的继续放大,(由于e^x的性质)

样例

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import torch
import torch.nn.functional as F

if __name__ == '__main__':
    device = torch.device('mps' if torch.backends.mps.is_available() else 'cpu')
    x = torch.linspace(-20,20,30, requires_grad=True,device=device)
    y = F.softmax(x,dim=0)
    print(x.detach())
    print(y.detach())
    print(y.detach().sum())
# tensor([-20.0000, -18.6207, -17.2414, -15.8621, -14.4828, -13.1034, -11.7241,
#         -10.3448,  -8.9655,  -7.5862,  -6.2069,  -4.8276,  -3.4483,  -2.0690,
#          -0.6897,   0.6897,   2.0690,   3.4483,   4.8276,   6.2069,   7.5862,
#           8.9655,  10.3448,  11.7241,  13.1034,  14.4828,  15.8621,  17.2414,
#          18.6207,  20.0000], device='mps:0')
# tensor([3.1788e-18, 1.2627e-17, 5.0156e-17, 1.9923e-16, 7.9136e-16, 3.1434e-15,
#         1.2486e-14, 4.9597e-14, 1.9701e-13, 7.8254e-13, 3.1084e-12, 1.2347e-11,
#         4.9044e-11, 1.9481e-10, 7.7382e-10, 3.0738e-09, 1.2209e-08, 4.8498e-08,
#         1.9264e-07, 7.6520e-07, 3.0395e-06, 1.2073e-05, 4.7958e-05, 1.9050e-04,
#         7.5668e-04, 3.0056e-03, 1.1939e-02, 4.7423e-02, 1.8837e-01, 7.4825e-01],
#        device='mps:0')
# tensor(1., device='mps:0')

可以最后使用经过Softmax激活后的y进行sum()聚合,得到的结果为一,可见非常适用于多分类的概率预测,常配合负对数损失函数进行损失计算.

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

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

相关文章

心觉:潜意识开发为何失败?99%的人卡在理性与感性学习的误区

Hi,我是心觉,与你一起玩转潜意识、脑波音乐和吸引力法则,轻松掌控自己的人生! 挑战每日一省写作187/1000天 小时候看武侠剧的时候,经常看到剧中有武林高手把绝世武功传给某个涉世未深的铁憨憨主角,比如《天…

四、Drf认证组件

四、Drf认证组件 4.1 快速使用 from django.shortcuts import render,HttpResponse from rest_framework.response import Response from rest_framework.views import APIView from rest_framework.authentication import BaseAuthentication from rest_framework.exception…

win11 升级报 0x80073713 错误

安装错误 - 0x80073713 通常是由于系统文件损坏或 Windows Update 组件异常引起的。‌ 这个问题可能阻止您的系统正常接收和安装更新,影响系统的稳定性和安全性。 可以尝试如下如下方法: 首先,您可以尝试使用命令提示符运行系统文件检查器…

资源《Arduino 扩展板2-矩阵按钮 》说明。

资源链接: Arduino 扩展板2-矩阵按钮 1.文件明细 2.文件内容说明 包含:AD工程、原理图、PCB。 3.内容展示 4.简述 该文件为PCB工程,采用AD做的。 该文件打板后配合Arduino使用,属于Arduino的扩展板。 该文件主要有16个按钮…

wgan的实现的伪代码,和原理,dcgan,模型坍塌 em距离 js kl散

原文地址 https://blog.csdn.net/Keep_Trying_Go/article/details/130471766 伪代码详细看这个, 特别注意点:gan(xnosize) 生成器 是 输入噪声 ,而不是全部噪声生成的 特别注意点:gan(xnosize) 生成器 是 输入噪声 &#…

vue3使用Teleport 控制台报警告:Invalid Teleport target on mount: null (object)

Failed to locate Teleport target with selector “.demon”. Note the target element must exist before the component is mounted - i.e. the target cannot be rendered by the component itself, and ideally should be outside of the entire Vue component tree main.…

基于SSM+小程序的选课管理系统2(源码+sql脚本+视频导入教程+文档)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 ​ 教师的账号和密码可以注册,管理员的账号和密码可由系统开发者在数据库中设置,学生的账号和密码可以由注册获得。 1、管理员的主要功能为学生资料、教师资料的添…

如何升级OCAT

如何升级OCAT 一. 从官网下载OCAT 官网下载地址链接:https://github.com/ic005k/OCAuxiliaryTools/releases 目前下载下来版本为0.8.8,但RapidEFI显示最新版本已经为1.0.1。 为了防止OC版本过低导致进不了系统,需要对OCAT进行升级。![在这里…

.NET 一款支持冰蝎的免杀WebShell

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

探索 PixiJS:强大的 2D 图形渲染库

探索 PixiJS:强大的 2D 图形渲染库 演示地址 演示地址 源码地址 源码地址 获取更多 获取更多 随着 Web 技术的发展,越来越多的开发者希望在网页中实现丰富的视觉效果和动画。PixiJS 作为一个高性能的 2D 渲染库,凭借其强大的功能和易用性…

《NoSQL》非关系型数据库MongoDB 学习笔记!

Mongo基础: 使用数据库: 使用use 命令 后面跟着要使用的数据库名字即可, 例如:use cities, 值得注意的是, mongo中不像mysql, 还需要先创建数据库,后访问, mongo中,你无…

媒介坊:在数字化时代,企业如何在竞争激烈的市场中脱颖而出

在当今的数字化时代,企业如何在竞争激烈的市场中脱颖而出,成为消费者关注的焦点?软文投放作为一种高效的营销手段,正受到越来越多企业的青睐。而媒介坊,作为一站式软文投放平台,正是帮助企业实现这一目标的…

Android Camera2 与 Camera API技术探究和RAW数据采集

Android Camera2 Android Camera2 是 Android 系统中用于相机操作的一套高级应用程序接口(API),它取代了之前的 Camera API。以下是关于 Android Camera2 的一些主要信息: 主要特点: 强大的控制能力:提供…

JavaWeb——Vue组件库Element(4/6):案例:基本页面布局(基本框架、页面布局、CSS样式、完善布局、效果展示,含完整代码)

目录 步骤 基本页面布局 基本框架 页面布局 CSS样式 完善布局 效果展示 完整代码 Element 的基本使用方式以及常见的组件已经了解完了,接下来要完成一个案例,通过这个案例让大家知道如何基于 Element 中的各个组件制作一个完整的页面。 案例&am…

Labview helper

IMAQ Advanced Setup Learn Geometric Pattern 2 VI 参数说明Curve Extraction Mode (0)指定VI如何识别图像中的曲线。如果您希望VI不对图像中对象的均匀性或图像背景做出任何假设,请将此选项设置为正常。如果您希望VI假定图像中的对象或图像背景由均匀的像素值组成…

PCL 最远点采样(FPS)

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 可视化函数 2.1.2 最远点采样 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接: PCL点云算法与项目实战案例汇总(长期更新&#xff0…

事务原理,以及MVCC如何实现RC,RR隔离级别的

事务原理 redo log 保持持久性: 首先原来的情况是我们做一组操作的时候,先去操作bufferpool缓冲区,如果没有,那么后台线程将数据页换入换出到缓冲区,然后我们对这个buffer pool进行修改,为脏页&#xff0c…

Redis篇(Redis原理 - 数据结构)(持续更新迭代)

目录 一、动态字符串 二、intset 三、Dict 1. 简介 2. Dict的扩容 3. Dict的rehash 4. 知识小结 四、ZipList 1. 简介 2. ZipListEntry 3. Encoding编码 五、ZipList的连锁更新问题 六、QuickList 七、SkipList 八、RedisObject 1. 什么是 redisObject 2. Redi…

开放式耳机哪个品牌好?2024年蓝牙耳机排行榜

开放式蓝牙耳机以其独树一帜的佩戴方式,正逐渐成为音乐爱好者和运动达人的新宠。时尚而又实用。如果你对传统耳机的佩戴方式感到厌倦,或者在寻找一款既能提供高品质音乐体验又能兼顾佩戴舒适性的耳机,那么开放式蓝牙耳机可能会是你的理想选择…

Vue3轻松实现前端打印功能

文章目录 1.前言2.安装配置2.1 下载安装2.2 main.js 全局配置3.综合案例3.1 设置打印区域3.2 绑定打印事件3.3 完整代码4.避坑4.1 打印表格无边框4.2 单选框复选框打印不选中4.3 去除页脚页眉4.4 打印內容不自动换行1.前言 vue3 前端打印功能主要通过插件来实现。 市面上常用的…