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])
相关推荐
ROBOT玲玉13 小时前
Milvus 中,FieldSchema 的 dim 参数和索引参数中的 “nlist“ 的区别
python·机器学习·numpy
GocNeverGiveUp13 小时前
机器学习2-NumPy
人工智能·机器学习·numpy
AI小白白猫1 天前
20241230 基础数学-线性代数-(1)求解特征值(numpy, scipy)
线性代数·numpy·scipy
子晓聊技术5 天前
【Python技术】同花顺wencai涨停分析基础上增加连板分析
后端·python·numpy
西猫雷婶8 天前
python学opencv|读取图像(九)用numpy创建黑白相间灰度图
python·opencv·numpy
星霜旅人8 天前
Python的基础知识
开发语言·python·numpy
fmc12110410 天前
【3】数据分析基础(Numpy的计算)
数据挖掘·数据分析·numpy
HP-Patience10 天前
【NumPy进阶】:内存视图、性能优化与高级线性代数
python·numpy
sinat_3842410912 天前
Python程序是一个基于Tkinter的GUI应用程序,用于录制和回放用户的鼠标和键盘操作
python·django·flask·beautifulsoup·numpy·scikit-learn
yivifu13 天前
利用cnocr库完成中文扫描pdf文件的文字识别
python·pdf·numpy·pymupdf·cnocr