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

【NLP 14、激活函数 ② tanh激活函数】

学会钝感力,走向美好的方向

                                —— 24.12.11

一、tanh激活函数

1. tanh函数的定义

tanh是双曲正切函数(Hyperbolic Tangent),数学表达式为

其函数图像是一个S型曲线,以原点 (0,0) 为中心对称,定义域为(-∞,+∞),值域是( - 1,1)。

2.tanh函数的特点

① 输出范围有限:

        输出值始终在-1到1之间,这使得在神经网络中使用时,能够将神经元的输出限制在一个特定的区间内,避免输出值过大或过小而导致的梯度消失或梯度爆炸问题(相对而言,比没有范围限制的激活函数在这方面有优势)。

        例如,在一个多层神经网络中,如果某一层的输出没有限制,随着层数的增加,输出可能会变得极大或极小,而 tanh 函数可以起到一定的稳定输出的作用。

② 原点对称:

        tanh是奇函数,即tanh(-x) = -tanh(x)。这种对称性使得它在处理具有正负两种特征的数据时比较合适。

        例如,在一些需要区分正负信号的神经网络(如在处理包含正负情感倾向的文本分类任务)中,tanh 函数能够更好地表示这种对称的特征空间

③ 单调性:

        在定义域内是单调递增函数,这保证了其导数具有一定的良好性质,有利于在反向传播算法中计算梯度。

3.导数及其性质

tanh 函数的导数为。这个导数在反向传播过程中用于计算梯度,它的计算相对简单,并且由于tanh(x) 的值域是(-1,1),所以 1 - tanh(x) ^ 2 的值域是 (0,1],这意味着在反向传播时,梯度的值始终是有限的,不会出现像某些激活函数(如 Relu 函数在某些情况下导数恒为1可能导致梯度爆炸)那样导致梯度失控的情况。

4.应用场景

循环神经网络(RNN)

在 RNN 及其变体(如 LSTM、GRU)中经常被用作激活函数。

例如,在处理(a)序列数据(如文本、时间序列等)时,tanh 函数可以对神经元的输出进行有效激活,将输出限制在合适的范围内,帮助模型更好地处理序列中的长期依赖关系。假设在一个基于 RNN 的语言模型中,每个时间步的隐藏状态通过 tanh 激活函数来更新,这样可以使隐藏状态的值不会过大或过小,从而更稳定地对文本席列进行建模。

神经网络隐藏层

在一般的多层前馈神经网络的隐藏层中也有应用。

它可以作为激活函数来引入非线性特性,帮助神经网络拟合复杂的函数关系。

与 sigmoid 函数相比, tanh 函数的输出值域更宽,能够提供更强的非线性表达能力,使得神经网络能够更好地学习数据中的复杂模式。


二、手动实现tanh激活函数

isinstance():用于检査一个对象是否是某个特定类(或类型)的实例或者是否属于某几个类(或类型)之一。它返回一个布尔值,即如果对象是指定类(或类型)的实例,则返回True ,否则返回False。 

flatten(): 是 numpy 库中 ndarray (多维数组)对象的一个方法,它的主要作用是将多维数组转换为一维数组,即将数组的维度降低到1维。这个过程不会改变原始数组的数据内容,只是改变了数组的形状。

reshape(): 是一种用于改变数组或张量形状的操作。它不会改变数据本身的内容,只是改变了数据的存储形状,使得数据可以按照新的维度结构进行访问和处理。

append():在列表末尾添加一个新元素,这个方法会直接修改原始列表,而不是返回一个修改后的新列表。

# coding:utf8
import torch
import numpy'''
手动实现tanh函数
'''def tanh(x):if isinstance(x, (list, tuple, numpy.ndarray)):result = []if isinstance(x, numpy.ndarray):# 遍历numpy数组中的每个元素进行计算for element in x.flatten():result.append((numpy.exp(element) - numpy.exp(-element)) / (numpy.exp(element) + numpy.exp(-element)))return numpy.array(result).reshape(x.shape)else:# 遍历列表或元组中的每个元素进行计算for element in x:result.append((numpy.exp(element) - numpy.exp(-element)) / (numpy.exp(element) + numpy.exp(-element)))return resultelse:return (numpy.exp(x) - numpy.exp(-x)) / (numpy.exp(x) + numpy.exp(-x))# 示例输入
x = [1, 2, 3]
# torch实现的tanh
print("torch.tanh:",torch.tanh(torch.Tensor(x)))
# 自己实现的tanh
print("diy.tanh:",tanh(x))# 再测试下numpy数组作为输入的情况
numpy_x = numpy.array([1, 2, 3])
print(torch.tanh(torch.Tensor(numpy_x)))
print(tanh(numpy_x))

相关文章:

【NLP 14、激活函数 ② tanh激活函数】

学会钝感力,走向美好的方向 —— 24.12.11 一、tanh激活函数 1. tanh函数的定义 tanh是双曲正切函数(Hyperbolic Tangent),数学表达式为 其函数图像是一个S型曲线,以原点 (0,0) 为中心对称,定…...

前端如何实现签名功能

1.JS实现 前端实现签名功能&#xff0c;通常是通过在页面上创建一个可绘制的区域&#xff0c;用户可以用鼠标或触摸设备进行签名。这个区域通常是一个<canvas>元素&#xff0c;结合JavaScript来处理绘制和保存签名。下面是一个简单的实现步骤&#xff1a; 1.1. 创建HTM…...

若依将数据库更改为SQLite

文章目录 1. 添加依赖项2. 更新配置文件 application-druid.yml2.1. 配置数据源2.2. 配置连接验证 3. 更新 MybatisPlusConfig4. 解决 mapper 中使用 sysdate() 的问题4.1. 修改 BaseEntity4.2. 修改 Mapper 5. 更新 YML 配置 正文开始&#xff1a; 前提条件&#xff1a;在您的…...

CRMEB Pro版v3.2源码全开源+PC端+Uniapp前端+搭建教程

一.介绍 crmeb pro版 v3.2正式发布&#xff0c;全新UI重磅上线&#xff0c;焕然一新&#xff0c;不负期待&#xff01;页面DIY设计功能全面升级&#xff0c;组件更丰富&#xff0c;样式设计更全面&#xff1b;移动端商家管理&#xff0c;让商城管理更便捷&#xff0c;还从页面…...

Docker 安装 Jenkins:2.346.3

准备&#xff1a;已安装Docker&#xff0c;已配置服务器安全组规则 1581 1、拉取镜像 [rootTseng ~]# docker pull jenkins/jenkins:2.346.3 2.346.3: Pulling from jenkins/jenkins 001c52e26ad5: Pull complete 6b8dd635df38: Pull complete 2ba4c74fd680: Pull complet…...

【OpenCV】模板匹配

理论 模板匹配是一种在较大图像中搜索和查找模板图像位置的方法。为此&#xff0c;OpenCV 带有一个函数 cv.matchTemplate&#xff08;&#xff09; 。它只是在输入图像上滑动模板图像&#xff08;如在 2D 卷积中&#xff09;&#xff0c;并比较模板图像下的模板和输入图像的补…...

黑马商城微服务复习(5)

MQ 一、同步调用和异步调用1. 同步调用2. 异步调用 二、RabbitMQ1. 基础使用2. 实际操作 怎么用?3. RabbitMQ虚拟主机 数据隔离4. 在JAVA中实现RabbitMQ5. 交换机种类 一、同步调用和异步调用 1. 同步调用 微服务一旦拆分&#xff0c;必然涉及到服务之间的相互调用&#xff…...

云原生基础设施指南:精通 Kubernetes 核心与高级用法

1. 云原生的诞生 随着互联网规模的不断增长&#xff0c;以及企业对敏捷开发、快速交付和高可用性的需求日益增强&#xff0c;传统的单体架构逐渐暴露出局限性&#xff0c;难以满足现代业务对动态扩展和高效迭代的要求。为此&#xff0c;云原生应运而生。 云原生是为云计算时代…...

人工智能概要

目录 前言1.什么是人工智能&#xff08;Artificial Intelligence, AI&#xff09;2.人工智能发展的三次浪潮2.1 人工智能发展的第一次浪潮2.2 人工智能发展的第二次浪潮2.3 人工智能发展的第三次浪潮 3.人工智能发展的必备三要素3.1 数据3.2 算法&#xff08;algorithm&#xf…...

qt QCommandLineParser详解

1、概述 QCommandLineParser是Qt框架中提供的一个类&#xff0c;专门用于解析命令行参数。它简化了命令行参数的处理过程&#xff0c;使得开发者能够轻松定义、解析和验证命令行选项和参数。QCommandLineParser适用于需要从命令行获取输入的控制台应用程序&#xff0c;以及需要…...

力扣 K个一组翻转链表

K个一组翻转链表 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(ne…...

cnocr配置及训练测试

cnocr配置及训练测试 1&#xff0c;相关链接2&#xff0c;已有模型调用测试&#xff08;1&#xff09;下载相关模型&#xff08;2&#xff09;Cnstd文本检测模型&#xff08;3&#xff09;模型调用解析脚本 3&#xff0c;自定义数据集训练测试&#xff08;1&#xff09;标签转换…...

解决 Flutter 在 Mac 上的编译错误

解决 Flutter 在 Mac 上的编译错误 在使用 Flutter 进行项目开发并尝试在 Mac 设备上进行编译时&#xff0c;遇到了一系列的错误信息&#xff0c;这些错误信息给项目的构建与部署带来了阻碍。 一、错误详情 在编译过程中&#xff0c;Xcode 输出了大量的信息&#xff0c;其中…...

MR30分布式IO在新能源领域加氢站的应用

导读 氢能被誉为21世纪最具发展潜力的清洁能源&#xff0c;氢能科技创新和产业发展持续得到各国青睐。氢能低碳环保&#xff0c;燃烧的产物只有水&#xff0c;是用能终端实现绿色低碳转型的重要载体。氢能产业链分别为上游制氢、中游储运以及下游用氢。上游制氢工艺目前大部分…...

wxPython中wx.ListCtrl用法(二)

wx.ListCtrl是一个列表组件&#xff0c;可以以列表视图&#xff08;list view&#xff09;、报表视图&#xff08;report view&#xff09;、图标视图&#xff08;icon view&#xff09;和小图标视图&#xff08;small icon view&#xff09;等多种模式显示列表。 一、方法 __…...

kubernetes 资源汇总

kubernetes 资源汇总 官网 英文文档 官方英文文档 中文文档 官方中文文档 github github源码地址 培训认证 也就是linux基金会的认证&#xff0c;上面也提供培训课程 下载资源 官网下载资源&#xff0c;国内的话k8s镜像下载不了&#xff0c;要去镜像站 在线练习 killer…...

每日一题(对标gesp三级答案将在第二天公布)

编程题 题目描述&#xff1a; 小杨为数字4,5,6和7设计了一款表示形式&#xff0c;每个数字占用了66的网格。数字4,5,6和7的表示形式如下&#xff08;此处自行设计复杂一些的表示形式示例&#xff09;&#xff1a; 数字4&#xff1a; …. …. …. …. *… 数字5&#xff1a; …...

让 Win10 上网本 Debug 模式 QUDPSocket 信号槽 收发不丢包的方法总结

在前两篇文章里&#xff0c;我们探讨了不少UDP丢包的解决方案。经过几年的摸索测试&#xff0c;其实方法非常简单, 无需修改代码。 1. Windows 下设置UDP缓存 这个方法可以一劳永逸解决UDP的收发丢包问题&#xff0c;只要添加注册表项目并重启即可。即使用Qt的信号与槽&#…...

Python爬虫之使用BeautifulSoup进行HTML Document文档的解析

BeautifulSoup 是一个用于解析 HTML 和 XML 文档的 Python 库&#xff0c;它为开发者提供了一种简单的方式来查找、遍历和修改文档树。BeautifulSoup 特别擅长处理不规则或格式不佳的标记语言&#xff0c;可以自动更正无效的 HTML&#xff0c;因此在网页抓取&#xff08;Web Sc…...

vue.config.js配置参数说明新手教程

这篇文章主要是对vue.config.js配置文件的主要参数进行一下说明&#xff0c;方便使用时的查询&#xff0c; 下面进行介绍 1、vue.config.js vue.config.js 是一个可选的配置文件&#xff0c;如果项目的 (和 package.json 同级的) 根目录中存在这个文件&#xff0c;那么它会被…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...

Xela矩阵三轴触觉传感器的工作原理解析与应用场景

Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知&#xff0c;帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量&#xff0c;能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度&#xff0c;还为机器人、医疗设备和制造业的智…...

Linux安全加固:从攻防视角构建系统免疫

Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...