当前位置: 首页 > news >正文

动手学深度学习(pytorch)学习记录12-激活函数[学习记录]

激活函数

激活函数(activation function)通过计算加权和并加上偏置来确定神经元是否应该被激活, 它们将输入信号转换为输出的可微运算。

import torch  
import matplotlib.pyplot as plt 

简单定义一个画图的函数

def graph_drawing(x_,y_,label_=None): plt.figure(figsize=(5, 2.5))  # 设置图形窗口的大小if label_ is None:plt.plot(x_, y_)else:plt.plot(x_, y_, label = label_)# plt.plot()里不要marker='x'更好看plt.legend()  # 显示图例      plt.show()

创建数据

# 创建 x 数据,并设置 requires_grad=True  
x = torch.arange(-8.0, 8.0, 0.1, requires_grad=True) 

ReLU函数

ReLU(Rectified Linear Unit)函数是一种在深度学习中广泛使用的激活函数,其表达式为f(x) = max(0, x)。它简单地将所有的负值置为0,保持正值不变,有助于解决梯度消失问题,并加速神经网络的训练过程。
在这里插入图片描述

# 应用 ReLU 函数  
y = torch.relu(x)  
graph_drawing(x_=x.detach(),y_=y.detach(),label_='relu(x)')

在这里插入图片描述
当输入为负时,ReLU函数的导数为0,而当输入为正时,ReLU函数的导数为1。 当输入值精确等于0时,ReLU函数不可导。可以忽略这种情况,因为输入可能永远都不会是0.

# 绘制ReLU函数的导函数图像
y.backward(torch.ones_like(x), retain_graph=True)
# retain_graph=True:这是一个可选参数,用于控制梯度图(即用于计算梯度的图结构)的保留。在默认情况下,.backward()会清除梯度图以节省内存。
graph_drawing(x_=x.detach(),y_=x.grad.numpy(),label_='grad of ReLU')
#转换为 numpy 数组,似乎转不转都行

在这里插入图片描述

sigmoid函数

对于一个定义域在R中的输入, sigmoid函数将输入变换为区间(0, 1)上的输出。 因此,sigmoid通常称为挤压函数(squashing function): 它将范围(-inf, inf)中的任意输入压缩到区间(0, 1)中的某个值。
当我们想要将输出视作二元分类问题的概率时, sigmoid仍然被广泛用作输出单元上的激活函数 (sigmoid可以视为softmax的特例)。
当输入接近0时,sigmoid函数接近线性变换。
在这里插入图片描述

# 绘制sigmoid函数图像
y = torch.sigmoid(x)
graph_drawing(x_=x.detach(),y_=y.detach(),label_='sigmoid(x)')

在这里插入图片描述
sigmoid函数的导数当输入为0时,sigmoid函数的导数达到最大值0.25; 而输入在任一方向上越远离0点时,导数越接近0。
在这里插入图片描述

# 清除以前的梯度
x.grad.data.zero_()
y.backward(torch.ones_like(x),retain_graph=True)
graph_drawing(x_=x.detach(),y_=x.grad.numpy(),label_='grad of sigmoid')

在这里插入图片描述

tanh函数

与sigmoid函数类似, tanh(双曲正切)函数也能将其输入压缩转换到区间(-1, 1)上。
在这里插入图片描述

y = torch.tanh(x)
graph_drawing(x_=x.detach().numpy(), y_=y.detach().numpy(), label_='tanh(x)')

在这里插入图片描述
tanh函数的导数图像: 当输入接近0时,tanh函数的导数接近最大值1。 与sigmoid函数图像类似, 输入在任一方向上越远离0点,导数越接近0
在这里插入图片描述

# 清除以前的梯度
x.grad.data.zero_()
y.backward(torch.ones_like(x),retain_graph=True)
graph_drawing(x_=x.detach(),y_=x.grad.numpy(),label_='grad of tanh')

在这里插入图片描述
封面图片来源

欢迎点击我的主页查看更多文章。
本人学习地址https://zh-v2.d2l.ai/
恳请大佬批评指正。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Docker-制作镜像
  • 物联网(IoT)详解
  • Halcon灰度图像的形态学运算
  • 代码随想录算法训练营第四十二天| 42. 接雨水、84.柱状图中最大的矩形
  • MATLAB遗传算法求带自提点的时间窗同时取送货车辆调度路径规划(VRPSPDTW)实例代码
  • ant design pro 中用户的表单如何控制多个角色
  • 大数据应用整理
  • IDEA:如何在idea中设置自动导包
  • 17、springboot3 vue3开发平台-前端-主页面布局搭建
  • 使用 prerenderRoutes 进行预渲染路由
  • 设计模式实战:旅行预订系统的设计与实现
  • Java 操作 Redis和redis持久化
  • C++图笔记(二)最短路
  • 【速通C语言(纯小白版)】第一部分:准备工作
  • microsoft edge怎么关闭安全搜索
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • CSS3 变换
  • Javascript Math对象和Date对象常用方法详解
  • JavaScript 基本功--面试宝典
  • JavaScript中的对象个人分享
  • Puppeteer:浏览器控制器
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • React的组件模式
  • V4L2视频输入框架概述
  • vuex 学习笔记 01
  • 产品三维模型在线预览
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 开源地图数据可视化库——mapnik
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 我的面试准备过程--容器(更新中)
  • C# - 为值类型重定义相等性
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​业务双活的数据切换思路设计(下)
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • #Datawhale AI夏令营第4期#AIGC方向 文生图 Task2
  • (06)金属布线——为半导体注入生命的连接
  • (1)svelte 教程:hello world
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .bat文件调用java类的main方法
  • .NET 某和OA办公系统全局绕过漏洞分析
  • .NET 使用配置文件
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .NET 中的轻量级线程安全
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .NET技术成长路线架构图
  • .net快速开发框架源码分享
  • .net连接MySQL的方法
  • .net连接oracle数据库
  • .NET中 MVC 工厂模式浅析
  • .NET中分布式服务