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

1、Sigmoid函数

1.1 公式

Sigmoid函数的公式: f ( x ) = 1 1 + e − x f(x) =\frac{1}{1+e^{-x}} f(x)=1+ex1
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+ex)2ex=f(x)(1f(x))

1.2 对应图像

在这里插入图片描述

1.2 生成图像代码

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 函数的签名如下:

torch.sigmoid(input, *, out=None) → Tensor

这里的参数解释如下:

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

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

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

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])
  • 27
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熊猫Devin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值