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])
相关推荐
敲代码不忘补水1 天前
Python Matplotlib 数据可视化全面解析:选择它的七大理由与入门简介
开发语言·python·信息可视化·numpy·pandas·matplotlib
取个名字真难呐3 天前
2、PyTorch张量的运算API(上)
pytorch·python·numpy
敲代码不忘补水3 天前
pandas 机器学习数据预处理:从缺失值到特征切分的全面解析
人工智能·后端·python·机器学习·numpy·pandas·matplotlib
小青头8 天前
numpy学习笔记
笔记·学习·numpy
取个名字真难呐8 天前
矩阵乘法实现获取第i行,第j列值,矩阵大小不变
python·线性代数·矩阵·numpy
小锋学长生活大爆炸9 天前
【教程】Cupy、Numpy、Torch互相转换
pytorch·numpy·cupy
鱼灯几许10 天前
Python爬虫
爬虫·python·numpy
爱折腾的小码农11 天前
记一次宝塔centos出现Failed to start crond.service: Unit crond.service not found.解决
python·centos·numpy
正义的彬彬侠13 天前
XGBoost算法Python代码实现
python·决策树·机器学习·numpy·集成学习·boosting·xgboost
竹笋常青15 天前
《流星落凡尘》
django·numpy