PyTorch学习笔记之激活函数篇(一)

文章目录

    • 1、Sigmoid函数
      • [1.1 公式](#1.1 公式)
      • [1.2 对应图像](#1.2 对应图像)
      • [1.2 生成图像代码](#1.2 生成图像代码)
      • [1.4 优点与不足](#1.4 优点与不足)
      • [1.5 torch.sigmoid()函数](#1.5 torch.sigmoid()函数)

1、Sigmoid函数

1.1 公式

Sigmoid函数的公式: f ( x ) = 1 1 + e − x f(x) =\frac{1}{1+e^{-x}} f(x)=1+e−x1

Sigmoid函数的导函数: f ′ ( x ) = e − x ( 1 + e − x ) 2 = f ( x ) ( 1 − f ( x ) ) f'(x) = \frac{e^{-x}}{(1+e^{-x})^2}=f(x)(1-f(x)) f′(x)=(1+e−x)2e−x=f(x)(1−f(x))

1.2 对应图像

1.2 生成图像代码

python 复制代码
import numpy as np
import matplotlib.pyplot as plt

# 定义Sigmoid函数
def sigmoid(x):
    return 1 / (1 + np.exp(-x))

# 定义Sigmoid函数的导数
def sigmoid_derivative(x):
    return sigmoid(x) * (1 - sigmoid(x))

# 创建一个x值的数组,从-10到10,间隔为0.01
x = np.arange(-10, 10, 0.01)

# 计算Sigmoid函数和它的导数的值
y_sigmoid = sigmoid(x)
y_sigmoid_derivative = sigmoid_derivative(x)

# 绘制Sigmoid函数和它的导数的图像
plt.figure(figsize=(8, 6))
plt.plot(x, y_sigmoid, label='Sigmoid Function')
plt.plot(x, y_sigmoid_derivative, label='Sigmoid Derivative')

# 设置图表的标题和坐标轴标签
plt.title('Sigmoid Function and Its Derivative')
plt.xlabel('x')
plt.ylabel('y')

# 显示图例
plt.legend()

# 设置网格线
plt.grid(True)

# 显示图像
plt.show()

1.4 优点与不足

优点

1、其值域为[0,1],非常适合作为模型的输出函数用于输出一个(0,1)范围内的概率值,可用于将预测概率作为输出的模型,比如用于表示二分类的类别或者用于表示置信度。

2、Sigmoid 函数的输出范围是 0 到 1。由于输出值限定在0到1,因此它对每个神经元的输出进行了归一化。

3、该函数是连续可导的(即可微),可以提供非常平滑的梯度值,防止模型训练过程中出现突变的梯度(即避免「跳跃」的输出值)。

不足

1、从其导数的函数图像上可以看到,其导数的最大值只有0.25,而且当x在[-5,5]的范围外时其导数值就已经几乎接近于0了。这种情况会导致训练过程中神经元处于一种饱和状态,反向传播时其权重几乎得不到更新,从而使得模型变得难以训练,这种现象被称为梯度消失问题。

2、其输出不是以0为中心而是都大于0的(这会降低权重更新的效率),这样下一层的神经元会得到上一层输出的全正信号作为输入,所以Sigmoid激活函数不适合放在神经网络的前面层而一般是放在最后的输出层中使用。

3、需要进行指数运算(计算机运行得较慢),计算量大及计算复杂度高,训练耗时;指数的越大其倒数就越小,容易产生梯度消失。

1.5 torch.sigmoid()函数

在PyTorch中,torch.sigmoid函数用于计算输入张量每个元素的Sigmoid函数值。Sigmoid函数是一个逻辑函数,它可以将任何实数映射到0和1之间

在PyTorch中,torch.sigmoid 函数的签名如下:

python 复制代码
torch.sigmoid(input, *, out=None) → Tensor

这里的参数解释如下:

  • input (Tensor): 输入张量。
  • out (Tensor, optional): 输出张量。如果提供,则函数的结果将写入此张量中,并且函数将返回这个张量。

torch.sigmoid 函数返回一个新的张量,其中包含了输入张量 input 每个元素的Sigmoid函数值。如果提供了 out 参数,则结果将直接写入这个张量中,并且返回这个张量。

例如,你可以像下面这样调用 torch.sigmoid 函数:

python 复制代码
import torch

# 创建一个输入张量
input_tensor = torch.tensor([-2.0, -1.0, 0.0, 1.0, 2.0])

# 计算Sigmoid函数值
output_tensor = torch.sigmoid(input_tensor)

# 打印结果
print(output_tensor)
# tensor([0.1192, 0.2689, 0.5000, 0.7311, 0.8808])
相关推荐
弱冠少年3 小时前
websockets库使用(基于Python)
开发语言·python·numpy
A_lvvx1 天前
07_矩形圆形绘制
开发语言·python·numpy
星霜旅人2 天前
Python数据分析篇--NumPy--进阶
python·数据分析·numpy
敲代码不忘补水4 天前
Python NumPy 数据分析:处理复杂数据的高效方法
python·数据分析·numpy
Thetoicxdude5 天前
[Day 80] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
人工智能·web3·numpy
Thetoicxdude5 天前
[Day 82] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
人工智能·web3·numpy
凭栏落花侧5 天前
数据预处理:数据挖掘的第一步
人工智能·python·数据挖掘·conda·numpy·pandas·pip
cndes7 天前
Numpy 和 Pandas的区别与高效协同
numpy·pandas
跟德姆(dom)一起学AI7 天前
0基础跟德姆(dom)一起学AI 数据处理和统计分析08-日期类型处理,Matplotlib介绍
开发语言·人工智能·python·信息可视化·numpy·matplotlib
deephub7 天前
8种数值变量的特征工程技术:利用Sklearn、Numpy和Python将数值转化为预测模型的有效特征
人工智能·python·机器学习·numpy·sklearn·特征工程