python对常见的激活函数绘图操作(详细代码讲解)

news2024/9/20 8:20:21

写论文的时候需要做一些激活函数的图像,为此将常见的激活函数进行整理汇总了一下,方便后续的复习

激活函数的作用是为让模型处理非线性问题,故次激活函数都是非线性的
生活中,非线性问题占大多数,而模型的训练通常都是线性可分的函数,通过非线性激活函数可以使得模型刚好的处理非线性问题

一、导包

from matplotlib import pyplot as plt
import numpy as np
import mpl_toolkits.axisartist as axisartist

二、sigmoid

简而言之:通过sigmoid函数可以将函数值转换为0-1之间,从而变成了概率问题,实现不同类别的分类
详细的函数推到可参考博文:四、逻辑回归

大概讲解下代码:
函数 sigmoid(x) 为sigmoid的表达式
在这里插入图片描述

函数 plot_sigmoid() 根据函数表达式进行绘图

x = np.arange(-10, 10, 0.1)
X轴从 [-10,10) 中每隔0.1选取一个点,X轴最终为200个数据点

y = sigmoid(x)
把x这些点带入sigmoid函数中得到对应的y值

fig = plt.figure()
生成一个图框,这个图框目前还不能画图,需要在其子图(subplot)或者轴域(Axes)中作图

ax = fig.add_subplot(111)
第一个参数表示行数、第二个参数表示列数、第三个参数表示第几个子图
这里就是一行、一列、第一个子图

ax.spines['top'].set_color('none')
去掉顶部的边框线,这里的none表示啥也没,相当于去掉顶端边框
ax.spines['right'].set_color('none')
同样的道理,去掉右侧的边框
左侧:left、底部:bottom

ax.spines['left'].set_position(('data', 0))
这里的data表示通过 给定的值(这里是0) 来进行设置坐标轴的位置
这里的0可以理解为:平移y轴到x轴的什么位置,这里就是平移y轴到x轴的0刻度处
当然参数也可以设置为axes,表示按百分比进行偏移y轴,也就相当于按多少进行平分x轴;后一个参数为0.5,相当于平分x轴
ax.spines['left'].set_position(('axes', 0.5))ax.spines['left'].set_position(('data', 0))是等价的关系

ax.plot(x, y, 'k-')
根据之前得到的x和y值进行绘制,前提x和y的个数是一致的,得一一对应才行
参数k-,表示颜色为black,使用 - 进行连接
也可以设置其他的,例如:红色,通过 + 这个符号进行连接,最后一个参数可以设置为r+,多动手试试就知道了

plt.xlim([-10.05, 10.05])
x轴的取值范围为 [-10.05,10.05]
plt.ylim([-0.01, 1.01])
y轴的取值范围为 [-0.01,1.01]

plt.tight_layout()
有时,轴标签和标题等会出现重叠、超过正常范围而被截断等情况发生,通过调用该函数即可进行解决

plt.savefig("sigmoid.png")
保存生成的图片,参数为字符串,传入要保存的具体路径

plt.show()
展示生成的图片

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

def plot_sigmoid():
    x = np.arange(-10, 10, 0.1)
    y = sigmoid(x)
    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.spines['top'].set_color('none')
    ax.spines['right'].set_color('none')
    ax.spines['left'].set_position(('data', 0))
    ax.plot(x, y, 'k-')
    plt.xlim([-10.05, 10.05])
    plt.ylim([-0.01, 1.01])
    plt.tight_layout()
    # plt.savefig("sigmoid.png")
    plt.show()
if __name__ == "__main__":
    plot_sigmoid()

在这里插入图片描述

二、tanh

函数表达式:在这里插入图片描述
函数 tanh(x) 为tanh的表达式

函数 plot_tanh() 绘制tanh函数图像
函数操作都大差不差,根据上面sigmoid激活函数的实现进行类比即可
这里只讲解未出现的函数

ax.set_yticks([-1.0, -0.8, -0.6, -0.4, -0.2, 0, 0.2, 0.4, 0.6, 0.8, 1.0])
设置y轴显示刻度的范围,说白了就是显示y轴的刻度线都有哪几个点
ax.set_xticks([-10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10])
设置x轴显示刻度的范围

def tanh(x):
    return (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))

def plot_tanh():
    x = np.arange(-10.0, 10.0, 0.1)
    y = tanh(x)
    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.spines['top'].set_color('none')
    ax.spines['right'].set_color('none')
    ax.spines['left'].set_position(('data', 0))
    ax.spines['bottom'].set_position(('data', 0))
    ax.plot(x, y, 'k-')
    plt.xlim([-10.05, 10.05])
    plt.ylim([-1.01, 1.01])
    ax.set_yticks([-1.0, -0.8, -0.6, -0.4, -0.2, 0, 0.2, 0.4, 0.6, 0.8, 1.0])
    ax.set_xticks([-10.0, -8.0, -6.0, -4.0, -2.0, 0.0, 2.0, 4.0, 6.0, 8.0, 10.0])
    plt.tight_layout()
    # plt.savefig("tanh.png")
    plt.show()
if __name__ == "__main__":
    plot_tanh()

在这里插入图片描述

三、relu

函数表达式:在这里插入图片描述
函数操作都大差不差,根据上面sigmoid激活函数的实现进行类比即可

def relu(x):
    return np.where(x <= 0, 0, x)

def plot_relu():
    x = np.arange(-10, 10, 0.1)
    y = relu(x)
    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.spines['top'].set_color('none')
    ax.spines['right'].set_color('none')
    ax.spines['left'].set_position(('data', 0))
    ax.plot(x, y, 'k-')
    plt.xlim([-10.05, 10.05])
    plt.ylim([0, 10.01])
    ax.set_yticks([2, 4, 6, 8, 10])
    plt.tight_layout()
    # plt.savefig("relu.png")
    plt.show()

if __name__ == "__main__":
    plot_relu()

在这里插入图片描述

四、elu

函数表达式:在这里插入图片描述
这里α取值为1,当然具体情况具体分析

函数操作都大差不差,根据上面sigmoid激活函数的实现进行类比即可

def elu(x):
    return np.where(x < 0, 1*(np.exp(x)-1), x)

def plot_elu():
    x = np.arange(-10, 10, 0.1)
    y = elu(x)
    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.spines['top'].set_color('none')
    ax.spines['right'].set_color('none')
    ax.spines['left'].set_position(('data', 0))
    ax.spines['bottom'].set_position(('data', 0))
    ax.plot(x, y, 'k-')
    #plt.xticks([])
    ax.set_yticks([-2, 0, 2, 4, 6, 8, 10])
    plt.tight_layout()
    # plt.savefig("prelu.png")
    plt.show()

if __name__ == "__main__":
    plot_elu()

在这里插入图片描述

五、prelu

函数表达式:在这里插入图片描述
这里的ai取值为0.5,当然具体情况具体分析

函数操作都大差不差,根据上面sigmoid激活函数的实现进行类比即可

def prelu(x):
    return np.where(x <= 0, 0.5 * x, x)

def plot_prelu():
    x = np.arange(-10, 10, 0.1)
    y = prelu(x)
    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.spines['top'].set_color('none')
    ax.spines['right'].set_color('none')
    ax.spines['left'].set_position(('data', 0))
    ax.spines['bottom'].set_position(('data', 0))
    ax.plot(x, y, 'k-')
    #plt.xticks([])
    ax.set_yticks([-6, -4, -2, 0, 2, 4, 6, 8, 10])
    plt.tight_layout()
    # plt.savefig("prelu.png")
    plt.show()

if __name__ == "__main__":
    plot_prelu()

在这里插入图片描述

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

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

相关文章

Fiddler工具 — 9.命令行和状态栏

1、命令行 命令行在Fiddler的左下方的黑色窗口&#xff0c;也叫QuickExec&#xff0c;可以调用 Fiddler的内置命令。 这一系列内置的函数用于筛选和操作会话列表中的session&#xff08;会话&#xff09;。 虽然它不是很显眼&#xff0c;但用好它&#xff0c;会让你的工作效率…

听GPT 讲Rust源代码--compiler(40)

File: rust/compiler/rustc_borrowck/src/region_infer/mod.rs 文件rust/compiler/rustc_borrowck/src/region_infer/mod.rs是Rust编译器中用于区域推断的模块文件。该文件中定义了一些类型和枚举&#xff0c;用于帮助编译器分析和推断代码中的生命周期和借用关系&#xff0c;以…

【霹雳吧啦】手把手带你入门语义分割の番外13:U2-Net 源码讲解(PyTorch)—— 损失的计算

目录 前言 Preparation 一、U2-Net 网络结构图 二、U2-Net 网络源代码 1、损失计算 2、model.py 3、train_and_eval.py 附&#xff1a;train_and_eval.py 源代码 前言 文章性质&#xff1a;学习笔记 &#x1f4d6; 视频教程&#xff1a;U2-Net 源码讲解&#xff08;PyT…

HTML JavaScript 康威生命游戏

<!DOCTYPE html> <html> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>康威生命游戏</title><style>body {font-family: Arial, sa…

CompletableFuture超详解与实践

0.背景 一个接口可能需要调用 N 个其他服务的接口&#xff0c;这在项目开发中还是挺常见的。举个例子&#xff1a;用户请求获取订单信息&#xff0c;可能需要调用用户信息、商品详情、物流信息、商品推荐等接口&#xff0c;最后再汇总数据统一返回。 如果是串行&#xff08;按…

SpringBoot项目的三种创建方式

手动创建方式&#xff1a; ①&#xff1a;新建maven项目 ②&#xff1a;引入依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.10.RELEASE</version>&l…

近似的同态比较:简单多项式的迭代计算

参考文献&#xff1a; [Gold64] Goldschmidt R E. Applications of division by convergence[D]. Massachusetts Institute of Technology, 1964.[CKKLL19] Cheon J H, Kim D, Kim D, et al. Numerical method for comparison on homomorphically encrypted numbers[C]//Inter…

普通人开视频号小店可以吗?

我是电商珠珠 我做电商也有五六年时间了&#xff0c;天猫、快手、抖店我都做过。 其中做抖店的时间最长&#xff0c;三年的时间&#xff0c;让我从个人化做到了团队化。 在22年的时候&#xff0c;发现了视频号小店这个项目&#xff0c;并开始投入进去。 一开始&#xff0c;…

Flask:模板渲染

本文章只作为个人笔记. 文章目录 前言 一、模板渲染 二、效果 前言 模板渲染 一、模板渲染 from flask import Flask, render_templateapp Flask(__name__)app.route(/) def hello_world():return render_template("index.html")app.route("/blog/<blog_…

java中常见的一些小知识(1)

1.数组转List 1.1. Arrays.asList public class Tesr {public static void main(String[] args) {String[] ary new String[]{ "1", "a"};List<String> list Arrays.asList((ary));list.add("ddsdsa");System.out.println(list);}}但是…

【EI会议征稿通知】第六届信息科学、电气与自动化工程国际学术会议(ISEAE 2024)

第六届信息科学、电气与自动化工程国际学术会议&#xff08;ISEAE 2024&#xff09; 2024 6th International Conference on Information Science, Electrical and Automation Engineering 第六届信息科学、电气与自动化工程国际学术会议&#xff08;ISEAE 2024&#xff09;定…

代码训练营Day.27 | 39. 组合总和、40. 组合总和II、131. 分割回文串

39. 组合总和 1. LeetCode链接 . - 力扣&#xff08;LeetCode&#xff09; 2. 题目描述 3. 解法 与其他组合总和题目不同的是&#xff0c;这一次数组中的数字可以重复使用。 回溯&#xff1a; 1. 参数和返回值。参数&#xff1a;数组、遍历起点、目标值。 2. 终止条件。…

Prometheus Blackbox_exporter笔记

一、安装Promtheus 在 Prometheus 官网 Download | Prometheus 获取适用于 Linux 的 Prometheus 安 装包&#xff0c;这里我选择最新的 2.46.0 版本&#xff0c;我是 Linux 系统&#xff0c;选择下载 prometheus-2.46.0.linux-amd64.tar.gz 下载安装包&#xff1a; wget htt…

Elasticsearch:Serarch tutorial - 使用 Python 进行搜索 (三)

这个是继上一篇文章 “Elasticsearch&#xff1a;Serarch tutorial - 使用 Python 进行搜索 &#xff08;二&#xff09;” 的续篇。在今天的文章中&#xff0c;本节将向你介绍一种不同的搜索方式&#xff0c;利用机器学习 (ML) 技术来解释含义和上下文。 向量搜索 嵌入 (embed…

【Axure高保真原型】日期天数加减计算器

今天和大家分享日期天数加减计算器的原型模板&#xff0c;我们通过这个模板选择指定日期&#xff0c;然后填写需要增加或者减少的天数&#xff0c;点击确认按钮后&#xff0c;就可以计算出对应的结束日期&#xff0c;本案例提供中继器版的日期选择器&#xff0c;以及JS版的日期…

C++常见的代码操作

1.输出C版本&#xff1a;cout << __cplusplus << endl; #include <iostream>int main() { cout << __cplusplus << endl;system("pause");return 0; } 老版的话会输出199711&#xff0c;支持c11的话会输出201103 注&#xff1a;vis…

java中实现对文件高效的复制

不多说我们直接上代码&#xff1a; 这个是使用NIO包下的FileChannel和ByteBuffer进行文件的操作的&#xff0c;会比较高效。

《人生没有太晚的开始》读书笔记

目录 一、作者简介 二、如何开始作画的&#xff1f; 三、经典语句摘录 一、作者简介 摩西奶奶&#xff08;安娜玛丽罗伯逊摩西&#xff09;1860- 1961年 78岁开始学习绘画&#xff0c;93岁登上《时代》杂志封面。 摩西奶奶的一生&#xff0c;是富有传奇色彩的一生&#xf…

企业内部知识库搭建真的很重要,优秀企业必备

在瞬息万变的商界&#xff0c;知识、信息和经验的获取和流通对于企业的生存和发展至关重要。每一个员工的专业知识、经验和教训&#xff0c;都不仅仅是他们自己的财富&#xff0c;更是企业的宝贵资产。然而&#xff0c;这些散布在公司各部门&#xff0c;甚至个别员工头脑中的知…

基于ssm的高校班级同学录网站设计与实现+jsp论文

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统高校班级同学录信息管理难度大&#xff0c;容错率低&…