动手学深度学习(pytorch)学习记录12-激活函数[学习记录]

激活函数

激活函数(activation function)通过计算加权和并加上偏置来确定神经元是否应该被激活, 它们将输入信号转换为输出的可微运算。

import torch  
import matplotlib.pyplot as plt 

简单定义一个画图的函数

def graph_drawing(x_,y_,label_=None): 
    plt.figure(figsize=(5, 2.5))  # 设置图形窗口的大小
    if label_ is None:
        plt.plot(x_, y_)
    else:
        plt.plot(x_, y_, label = label_)
        # plt.plot()里不要marker='x'更好看
        plt.legend()  # 显示图例      
    plt.show()

创建数据

# 创建 x 数据,并设置 requires_grad=True  
x = torch.arange(-8.0, 8.0, 0.1, requires_grad=True) 

ReLU函数

ReLU(Rectified Linear Unit)函数是一种在深度学习中广泛使用的激活函数,其表达式为f(x) = max(0, x)。它简单地将所有的负值置为0,保持正值不变,有助于解决梯度消失问题,并加速神经网络的训练过程。
在这里插入图片描述

# 应用 ReLU 函数  
y = torch.relu(x)  
graph_drawing(x_=x.detach(),y_=y.detach(),label_='relu(x)')

在这里插入图片描述
当输入为负时,ReLU函数的导数为0,而当输入为正时,ReLU函数的导数为1。 当输入值精确等于0时,ReLU函数不可导。可以忽略这种情况,因为输入可能永远都不会是0.

# 绘制ReLU函数的导函数图像
y.backward(torch.ones_like(x), retain_graph=True)
# retain_graph=True:这是一个可选参数,用于控制梯度图(即用于计算梯度的图结构)的保留。在默认情况下,.backward()会清除梯度图以节省内存。
graph_drawing(x_=x.detach(),y_=x.grad.numpy(),label_='grad of ReLU')
#转换为 numpy 数组,似乎转不转都行

在这里插入图片描述

sigmoid函数

对于一个定义域在R中的输入, sigmoid函数将输入变换为区间(0, 1)上的输出。 因此,sigmoid通常称为挤压函数(squashing function): 它将范围(-inf, inf)中的任意输入压缩到区间(0, 1)中的某个值。
当我们想要将输出视作二元分类问题的概率时, sigmoid仍然被广泛用作输出单元上的激活函数 (sigmoid可以视为softmax的特例)。
当输入接近0时,sigmoid函数接近线性变换。
在这里插入图片描述

# 绘制sigmoid函数图像
y = torch.sigmoid(x)
graph_drawing(x_=x.detach(),y_=y.detach(),label_='sigmoid(x)')

在这里插入图片描述
sigmoid函数的导数当输入为0时,sigmoid函数的导数达到最大值0.25; 而输入在任一方向上越远离0点时,导数越接近0。
在这里插入图片描述

# 清除以前的梯度
x.grad.data.zero_()
y.backward(torch.ones_like(x),retain_graph=True)
graph_drawing(x_=x.detach(),y_=x.grad.numpy(),label_='grad of sigmoid')

在这里插入图片描述

tanh函数

与sigmoid函数类似, tanh(双曲正切)函数也能将其输入压缩转换到区间(-1, 1)上。
在这里插入图片描述

y = torch.tanh(x)
graph_drawing(x_=x.detach().numpy(), y_=y.detach().numpy(), label_='tanh(x)')

在这里插入图片描述
tanh函数的导数图像: 当输入接近0时,tanh函数的导数接近最大值1。 与sigmoid函数图像类似, 输入在任一方向上越远离0点,导数越接近0
在这里插入图片描述

# 清除以前的梯度
x.grad.data.zero_()
y.backward(torch.ones_like(x),retain_graph=True)
graph_drawing(x_=x.detach(),y_=x.grad.numpy(),label_='grad of tanh')

在这里插入图片描述
封面图片来源

欢迎点击我的主页查看更多文章。
本人学习地址https://zh-v2.d2l.ai/
恳请大佬批评指正。

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

walfar

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

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

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

打赏作者

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

抵扣说明:

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

余额充值