1.激活函数

激活函数的作用是能够给神经网络加入一些非线性因素,使得神经网络可以更好地解决较为复杂的问题。因为很多问题都不是线性的,你只有给它加入一些非线性因素,就能够让问题更好的解决。

函数1:RELU()

优点:

  • 1.相比起Sigmoid和tanh,在SGD中能够快速收敛。
  • 2.有效缓解了梯度弥散的问题。

    a=torch.linspace(-1,1,10)
print(a)
# relu()小于0的都归为0,大于0的成线性
print(torch.relu(a))

输出结果

tensor([-1.0000, -0.7778, -0.5556, -0.333
3, -0.1111, 0.1111, 0.3333, 0.5556,
0.7778, 1.0000])
tensor([0.0000, 0.0000, 0.0000, 0.0000, 0
.0000, 0.1111, 0.3333, 0.5556, 0.7778,
1.0000])

函数2:Sigmoid()

优点:

  • 1.Sigmoid函数的输出映射在之间,单调连续,输出范围有限,优化稳定,可以用作输出层。
  • 2.求导比较容易。

缺点:

  • 1.在两个极端,容易出现梯度弥散。
  • 2.其输出并不是以0为中心的。

    a=torch.linspace(-100,100,10)
print(a)
# relu()小于0的都归为0,大于0的成线性
print(torch.sigmoid(a))

输出结果

tensor([-100.0000,  -77.7778,  -55.5556,
-33.3333, -11.1111, 11.1111,
33.3333, 55.5556, 77.7778,
100.0000])
tensor([0.0000e+00, 1.6655e-34, 7.4564e-2
5, 3.3382e-15, 1.4945e-05, 9.9999e-01,
1.0000e+00, 1.0000e+00, 1.0000e+0
0, 1.0000e+00])

函数3:Tanh()

优点:

  • 1.比Sigmoid函数收敛速度更快。
  • 2.相比Sigmoid函数,其输出以0为中心。

缺点:

  • 仍然存在由于饱和性产生的梯度弥散。

    a=torch.linspace(-10,10,10)
print(a)
# relu()小于0的都归为0,大于0的成线性
print(torch.tanh(a))

输出结果

tensor([-10.0000,  -7.7778,  -5.5556,  -3
.3333, -1.1111, 1.1111, 3.3333,
5.5556, 7.7778, 10.0000])
tensor([-1.0000, -1.0000, -1.0000, -0.997
5, -0.8045, 0.8045, 0.9975, 1.0000,
1.0000, 1.0000])

函数4:Softmax()

softmax通俗理解的大体意思就是,Z1,Z2,,,Zn中,所有的值,先进行一个e^Zi变换,得到yi,然后在除以所有yi的累加和,得到每个值在整个数组中的比重。经过一次sofymax()函数之后,会放大值与值之间的比例,例如图中的Z1,Z2,经过softmax函数之前,是3:1,经过之后,就变成了0.88:0.12。

作用:将张量的每个元素缩放到(0,1)区间且和为1

下图详细讲解了softmax是怎么计算的,图源于网络。

图中例子代码实现如下:

import torch
import torch.nn.functional as F if __name__ == '__main__':
data=torch.tensor([3.0,1.0,-3.0])
print(data)
y=F.softmax(data,dim=0)
print(y)

输出结果

tensor([ 3.,  1., -3.])
tensor([0.8789, 0.1189, 0.0022])

2维tensor进行softmax例子代码实现如下:

import torch
import torch.nn.functional as F if __name__ == '__main__':
data=torch.rand(2,3)
print(data) y=F.softmax(data,dim=1)
# dim=0,就是在1维上进行softmax,也就是在列上进行
# dim=1,就是在2维上进行softmax,也就是在行上进行
print(y)

输出结果

tensor([[0.1899, 0.3969, 0.8333],
[0.9149, 0.8438, 0.4973]])
tensor([[0.2420, 0.2976, 0.4604],
[0.3861, 0.3596, 0.2543]])

Pytorch-tensor的激活函数的更多相关文章

  1. Pytorch Tensor 常用操作

    https://pytorch.org/docs/stable/tensors.html dtype: tessor的数据类型,总共有8种数据类型,其中默认的类型是torch.FloatTensor, ...

  2. Pytorch Tensor, Variable, 自动求导

    2018.4.25,Facebook 推出了 PyTorch 0.4.0 版本,在该版本及之后的版本中,torch.autograd.Variable 和 torch.Tensor 同属一类.更确切地 ...

  3. pytorch tensor与numpy转换

    从官网拷贝过来的,就是做个学习记录.版本 0.4 tensor to numpy a = torch.ones(5) print(a) 输出 tensor([1., 1., 1., 1., 1.]) ...

  4. pytorch 3 activation 激活函数

    2.3 Activation Function import torch import torch.nn.functional as F from torch.autograd import Vari ...

  5. pytorch tensor 维度理解.md

    torch.randn torch.randn(*sizes, out=None) → Tensor(张量) 返回一个张量,包含了从标准正态分布(均值为0,方差为 1)中抽取一组随机数,形状由可变参数 ...

  6. pytorch tensor的索引与切片

    切片方式与numpy是类似. * a[:2, :1, :, :], * 可以用-1索引. * ::2,表示所有数据,间隔为2,即 start:end:step. *  a.index_select(1 ...

  7. Pytorch Tensor 维度的扩充和压缩

    维度扩展 x.unsqueeze(n) 在 n 号位置添加一个维度 例子: import torch x = torch.rand(3,2) x1 = x.unsqueeze(0) # 在第一维的位置 ...

  8. 【Code】numpy、pytorch实现全连接神经网络

    """ 利用numpy实现一个两层的全连接网络 网络结构是:input ->(w1) fc_h -> relu ->(w2) output 数据是随机出 ...

  9. Pytorch(一)

    一.Pytorch介绍 Pytorch 是Torch在Python上的衍生物 和Tensorflow相比: Pytorch建立的神经网络是动态的,而Tensorflow建立的神经网络是静态的 Tens ...

  10. [炼丹术]使用Pytorch搭建模型的步骤及教程

    使用Pytorch搭建模型的步骤及教程 我们知道,模型有一个特定的生命周期,了解这个为数据集建模和理解 PyTorch API 提供了指导方向.我们可以根据生命周期的每一个步骤进行设计和优化,同时更加 ...

随机推荐

  1. 基于六轴传感器MPU6050的加速度和角度值读取

    一 系统简介 1.简介 MPU-60x0 是全球首例 9 轴运动处理传感器.它集成了 3 轴MEMS陀螺仪,3 轴MEMS加速度计,以及一个可扩展的数字运动处理器 DMP(Digital Motion ...

  2. 基于 XAF Blazor 的规则引擎编辑器 - 实战篇

    示例项目:https://gitee.com/easyxaf/recharge-rules-engine-sample 前言 继上一篇文章对规则引擎编辑器进行了初步介绍之后,本文将通过实际应用案例深入 ...

  3. springboot增加slf4j

    参考:https://blog.csdn.net/qq_27706119/article/details/104977666(主要) https://www.liaoxuefeng.com/wiki/ ...

  4. 什么会导致JAVA应用程序的CPU使用率飙升

    问题 无限循环的while会导致CPU使用率飙升吗? 经常使用Young GC会导致CPU占用率飙升吗? 具有大量线程的应用程序的CPU使用率是否较高? CPU使用率高的应用程序的线程数是多少? 处于 ...

  5. rust使用lazy_static对全局变量多线程并发读写示例

    首先需要在项目依赖Cargo.toml添加lazy_static依赖项 [dependencies] lazy_static = "1.4.0" 示例代码如下: use lazy_ ...

  6. C# 按指定宽高缩放图片

    /// <summary> /// 按指定宽高缩放图片 /// </summary> /// <param name="image">原图片&l ...

  7. KingbaseES V8R6 等待事件之IO类BufFileRead BufFileWrite

    等待事件含义 当数据库创建临时文件时,会发生IO:BufFileRead和IO:BufFileWrite等待事件.当操作需要的内存比当前定义的work_mem内存参数更多时,会将临时数据写入磁盘永久存 ...

  8. 巧用dblink 实现多进程并行查询

    概述 对于分区表的大数据统计分析,由于数据量巨大,往往需要采用并行.但是数据库并行的效率相比分进程分表统计还是有比较大的差距.本文通过巧用dblink,实现分进程分分区统计数据. 例子 kingbas ...

  9. xpath解析爱奇艺电影网页数据

    1 url='https://list.iqiyi.com/www/1/-------------11-1-1-iqiyi--.html' 2 headers={ 3 'User-Agent':'Mo ...

  10. 【已解决】linux环境jps命令不显示进程

    2021-09-28 10:26:42 问题描述: 输入jps后不显示进程 解决办法 1. cd /tmp/hsperfdata_root/ 2. ls 如果是空的 3. rm -rf hsperfd ...