深度神经网络中使用的激活函数有很多种,这里介绍下tanh。它的公式如下,截图来自于维基百科(https://en.wikipedia.org/wiki/Activation_function):

tanh又称双曲正切,它解决了sigmoid非零中心问题。tanh取值范围在(-1, 1)内,它也是非线性的。它也不能完全解决梯度消失问题。

C++实现如下:

template<typename _Tp>
int activation_function_tanh(const _Tp* src, _Tp* dst, int length)
{for (int i = 0; i < length; ++i) {_Tp ep = std::exp(src[i]);_Tp em = std::exp(-src[i]);dst[i] = (ep - em) / (ep + em);}return 0;
}template<typename _Tp>
int activation_function_tanh_derivative(const _Tp* src, _Tp* dst, int length)
{for (int i = 0; i < length; ++i) {dst[i] = (_Tp)1. - src[i] * src[i];}return 0;
}int test_activation_function()
{std::vector<float> src{ 1.1f, -2.2f, 3.3f, 0.4f, -0.5f, -1.6f };int length = src.size();std::vector<float> dst(length);fprintf(stderr, "source vector: \n");fbc::print_matrix(src);fprintf(stderr, "calculate activation function:\n");fprintf(stderr, "type: tanh result: \n");fbc::activation_function_tanh(src.data(), dst.data(), length);fbc::print_matrix(dst);fprintf(stderr, "type: tanh derivative result: \n");fbc::activation_function_tanh_derivative(dst.data(), dst.data(), length);fbc::print_matrix(dst);
}

执行结果如下:

Python和PyTorch实现如下:

import numpy as np
import torchdata = [1.1, -2.2, 3.3, 0.4, -0.5, -1.6]# numpy impl
def tanh(x):lists = list()for i in range(len(x)):lists.append((np.exp(x[i]) - np.exp(-x[i])) / (np.exp(x[i]) + np.exp(-x[i])))return listsdef tanh_derivative(x):return 1 - np.power(tanh(x), 2)output = [round(value, 4) for value in tanh(data)] # 通过round保留小数点后4位
print("numpy tanh:", output)
print("numpt tanh derivative:", [round(value, 4) for value in tanh_derivative(data)])
print("numpt tanh derivative2:", [round(1. - value*value, 4) for value in tanh(data)])# call pytorch interface
input = torch.FloatTensor(data)
m = torch.nn.Tanh()
output2 = m(input)
print("pytorch tanh:", output2)
print("pytorch tanh derivative:", 1. - output2*output2)

执行结果如下:

由以上执行结果可知:C++、Python、PyTorch三种实现方式结果完全一致。

GitHub:

https://github.com/fengbingchun/NN_Test

https://github.com/fengbingchun/PyTorch_Test

激活函数之tanh介绍及C++/PyTorch实现相关推荐

  1. 激活函数、Sigmoid激活函数、tanh激活函数、ReLU激活函数、Leaky ReLU激活函数、Parametric ReLU激活函数详细介绍及其原理详解

    相关文章 梯度下降算法.随机梯度下降算法.动量随机梯度下降算法.AdaGrad算法.RMSProp算法.Adam算法详细介绍及其原理详解 反向传播算法和计算图详细介绍及其原理详解 激活函数.Sigmo ...

  2. keras 自定义层input_从4个方面介绍Keras和Pytorch,并给你选择其中一个学习库的理由...

    全文共3376字,预计学习时长7分钟 对许多科学家.工程师和开发人员而言,TensorFlow是他们的第一个深度学习框架. TensorFlow 1.0于2017年2月发布:但客观来说,它对用户不是非 ...

  3. Retinanet原理介绍和基于pytorch的实现

    Retinanet原理介绍和基于pytorch的实现 前言 Retinanet介绍 ResNet FPN SubNet anchor IoU Regression Focal Loss one-sta ...

  4. 三种激活函数——Sigmoid,Tanh, ReLU以及卷积感受野的计算

    1. 三种激活函数--Sigmoid, Tanh, ReLU 1.1 Sigmoid 1.1.1 公式 S ( x ) = 1 1 + e − x S(x) = \frac{1}{1 + e^{-x} ...

  5. 【Pytorch神经网络理论篇】 07 激活函数+Sigmoid+tanh+ReLU+Swish+Mish+GELU

    ①激活函数:主要通过加入非线性因素,你不线性模型表达能力不足的缺陷,因为神经网络中的数学基础是处处可微分的函数,故要求激活函数也应该保证数据的输入与输出是可微分. ②激活函数可以分为饱和激活函数与不饱 ...

  6. GPT模型介绍并且使用pytorch实现一个小型GPT中文闲聊系统

    文章目录 GPT模型介绍 无监督训练方式 模型结构 微调 下游任务输入形式 GPT-2 GPT-3 pytorch实现一个小型GPT中文闲聊系统 GPT模型介绍 GPT与BERT一样也是一种预训练模型 ...

  7. 激活函数和全连接层——基于Pytorch

    1.激活函数 1.1.什么是激活函数? 神经网络中的每个神经元接受上一层的输出值作为本神经元的输入值,并将处理结果传递给下一层(隐藏层或输出层).在多层神经网络中,上层的输出和下层的输入之间具有一个函 ...

  8. 激活函数--Sigmoid,tanh,RELU,RELU6,Mish,Leaky ReLU等

    激活函数 目前自己使用比较多的激活函数RELU, RELU6; LeakyReLU; SELU; Mish :激活函数看:计算量:准确率: 大多数激活函数pytorch里有已经包装好了: Non-li ...

  9. 激活函数σ、tanh、relu、Leakyrelu、LR_BP反向传播推导

    激活函数 1- SIgmoid 1-1 sigmoid导数 2- tanh 2-1 tanh函数导数 3- ReLU 4- LeakyReLu 5- LR 公式推导 Sigmoid.tanh.ReLU ...

最新文章

  1. VMware workstation安装
  2. gitlab中文_ASP.NET实战010:Visual Studio使用GitLab详解
  3. armel、armhf、arm64、armv7l 系统架构区别与联系(AArch64)
  4. 很好很强大,这款AI开发神器的图像标注吊打labelme
  5. Linux系统下解压缩安装MongoDB
  6. 机器学习爬大树之(GBDT原理)--二分类篇
  7. Laravel 日志权限问题
  8. mysql不等于多个数怎么写_mysql不等于符号怎么写
  9. html 颜色渐变动画效果,js实现按钮颜色渐变动画效果
  10. 《时间的玫瑰》书中的精髓:知名投资人但斌眼中的价值投资是什么?我们如何秉承价值投资的原则选择有价值的股票?
  11. Unity Shader - Shader Compilation Target Levels 着色器编译目标级别
  12. java 自然对数的底数_Java求自然对数底e的值
  13. 扫描至计算机功能被禁用,远程访问功能已禁用怎么办_允许远程界面控制被禁用的解决方法...
  14. amigo3.1 android版本,金立F103B GN3003官方原厂固件rom系统刷机包升级包3.1.15
  15. 序列1 - 以太坊的诞生,史上最大ICO之一
  16. Unsupervised Feature Learning via Non-Parametric Instance Discrimination
  17. [element]element-ui框架下载
  18. 哈尔滨工业大学计算机系统大作业
  19. sockjs.js?9be2:1603 GET http://192.168.1.7:8080/sockjs-node/info?t=1654959638136 net::ERR_C
  20. 基于支付宝小程序合成海报

热门文章

  1. Windows和Mac上CSV文件的乱码解决办法。
  2. TRIZ系列(发明的层次)
  3. java 技术提升路线
  4. python缩进规则 至少_6.Python缩进规则(包含快捷键)
  5. 沥青瓦UKCA认证—EN 544
  6. 解决Pycharm专业版卡顿、运行内存不足,修改配置最大内存常见问题。
  7. tcpdump如何抓接口包_tcpdump抓包命令
  8. Java web对试卷进行单选多选答题进行打分_一造准考证号未填涂,该份试卷分数清零?!...
  9. Three.js铅笔手绘效果实现
  10. 蓝牙耳机二百左右的哪个好? 南卡和万魔蓝牙耳机评测对比