PyTorch入门学习(十):神经网络-非线性激活

这篇具有很好参考价值的文章主要介绍了PyTorch入门学习(十):神经网络-非线性激活。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、简介

二、常见的非线性激活函数

三、实现非线性激活函数

四、示例:应用非线性激活函数


一、简介

在神经网络中,激活函数的主要目的是引入非线性特性,从而使网络能够对非线性数据建模。如果只使用线性变换,那么整个神经网络就会退化为一个线性模型,因为线性函数的组合仍然是线性的。非线性激活函数通过引入非线性性质,使神经网络能够适应更复杂的数据。

二、常见的非线性激活函数

ReLU(Rectified Linear Unit)

ReLU 是一种广泛使用的非线性激活函数。它的数学表达式如下:

f(x) = max(0, x)

ReLU 将小于零的输入值设为零,而大于零的输入值保持不变。这种性质使得神经网络能够学习到稀疏特征,加速训练,以及更好地处理梯度消失问题。在 PyTorch 中,可以使用 torch.nn.ReLU() 实现 ReLU 激活。

Sigmoid 函数

Sigmoid 函数是另一种非线性激活函数,它的数学表达式如下:

f(x) = 1 / (1 + exp(-x))

Sigmoid 函数将输入值映射到 0 到 1 之间,它在二元分类问题中广泛使用。然而,Sigmoid 函数在深度神经网络中容易出现梯度消失问题。在 PyTorch 中,可以使用 torch.nn.Sigmoid() 实现 Sigmoid 激活。

三、实现非线性激活函数

在 PyTorch 中,实现非线性激活函数非常简单。首先定义一个继承自 nn.Module 的类,然后在 forward 方法中应用所需的激活函数。下面是一个使用 ReLU 和 Sigmoid 激活函数的示例:

import torch
from torch import nn
from torch.nn import ReLU, Sigmoid

class MyModel(nn.Module):
    def __init__(self):
        super(MyModel, self).__init()
        self.relu = ReLU()
        self.sigmoid = Sigmoid()

    def forward(self, x):
        x_relu = self.relu(x)
        x_sigmoid = self.sigmoid(x)
        return x_relu, x_sigmoid

在上面的示例中,首先导入必要的库,然后定义了一个自定义模型 MyModel,它包含了 ReLU 和 Sigmoid 激活函数。在 forward 方法中,分别应用了这两个激活函数。

四、示例:应用非线性激活函数

下面将看到一个具体的示例,把非线性激活函数应用于图像数据。然后使用 PyTorch 和 CIFAR-10 数据集,这是一个广泛使用的图像分类数据集。最后使用 ReLU 和 Sigmoid 激活函数,并使用 TensorBoard 可视化结果。

import torch
from torch import nn
from torch.nn import ReLU, Sigmoid
from torch.utils.tensorboard import SummaryWriter
from torch.utils.data import DataLoader
import torchvision.datasets

# 加载 CIFAR-10 数据集
dataset = torchvision.datasets.CIFAR10("D:\\Python_Project\\pytorch\\dataset2", train=False, transform=torchvision.transforms.ToTensor(), download=True)
dataloader = DataLoader(dataset, batch_size=64)

# 定义自定义模型
class MyModel(nn.Module):
    def __init__(self):
        super(MyModel, self).__init__()
        self.relu = ReLU()
        self.sigmoid = Sigmoid()

    def forward(self, x):
        x_relu = self.relu(x)
        x_sigmoid = self.sigmoid(x)
        return x_relu, x_sigmoid

# 创建模型实例和 TensorBoard 编写器
model = MyModel()
writer = SummaryWriter("logs")
step = 0

# 遍历数据集并应用模型
for data in dataloader:
    imgs, targets = data
    output_relu, output_sigmoid = model(imgs)
    writer.add_images("input", imgs, step)
    writer.add_images("output_relu", output_relu, step)
    writer.add_images("output_sigmoid", output_sigmoid, step)
    step += 1

writer.close()

在上面的示例中,首先加载 CIFAR-10 数据集,然后定义了一个自定义模型 MyModel,其中包含了 ReLU 和 Sigmoid 激活函数。遍历数据集,将输入图像和经过激活函数处理后的输出图像写入 TensorBoard,以便进行可视化。

通过这个示例,可以看到非线性激活函数如何改变输入数据,引入非线性特性,从而增强神经网络的建模能力。

参考资料:

视频教程:PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】文章来源地址https://www.toymoban.com/news/detail-736216.html

到了这里,关于PyTorch入门学习(十):神经网络-非线性激活的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PyTorch入门学习(八):神经网络-卷积层

    目录 一、数据准备 二、创建卷积神经网络模型 三、可视化卷积前后的图像 一、数据准备 首先,需要准备一个数据集来演示卷积层的应用。在这个示例中,使用了CIFAR-10数据集,该数据集包含了10个不同类别的图像数据,用于分类任务。使用PyTorch的 torchvision 库来加载CIFAR-1

    2024年02月07日
    浏览(44)
  • PyTorch入门学习(六):神经网络的基本骨架使用

    目录 一、引言 二、创建神经网络骨架 三、执行前向传播 一、引言 神经网络是深度学习的基础。在PyTorch中,可以使用 nn.Module 类创建自定义神经网络模型。本文将演示如何创建一个简单的神经网络骨架并执行前向传播操作。 二、创建神经网络骨架 首先,导入PyTorch库并创建

    2024年02月08日
    浏览(41)
  • PyTorch入门学习(九):神经网络-最大池化使用

    目录 一、数据准备 二、创建神经网络模型 三、可视化最大池化效果 一、数据准备 首先,需要准备一个数据集来演示最大池化层的应用。在本例中,使用了CIFAR-10数据集,这是一个包含10个不同类别图像的数据集,用于分类任务。我们使用PyTorch的 torchvision 库来加载CIFAR-10数据

    2024年02月07日
    浏览(34)
  • Pytorch入门学习——快速搭建神经网络、优化器、梯度计算

    我的代码可以在我的Github找到 GIthub地址 https://github.com/QinghongShao-sqh/Pytorch_Study 因为最近有同学问我如何Nerf入门,这里就简单给出一些我的建议: (1)基本的pytorch,机器学习,深度学习知识,本文介绍的pytorch知识掌握也差不多. 机器学习、深度学习零基础的话B站​吴恩达、

    2024年02月14日
    浏览(42)
  • PyTorch入门学习(十一):神经网络-线性层及其他层介绍

    目录 一、简介 二、PyTorch 中的线性层 三、示例:使用线性层构建神经网络 四、常见的其他层 一、简介 神经网络是由多个层组成的,每一层都包含了一组权重和一个激活函数。每层的作用是将输入数据进行变换,从而最终生成输出。线性层是神经网络中的基本层之一,它执

    2024年02月05日
    浏览(40)
  • 【AI】《动手学-深度学习-PyTorch版》笔记(十七):卷积神经网络入门

    我们在前面学习的多层感知机中,已经认识了全链接层,缺点很明显,在稍微大点的网络模型中,参数成指数级别增长。参数量很快就达到数十亿,这样的量级几乎无法计算。为此科学家们想出一个减少参数的方法:卷积。 从全链接层到卷积的推论,使用如下两个原则: 平

    2024年02月13日
    浏览(61)
  • PyTorch入门学习(十二):神经网络-搭建小实战和Sequential的使用

    目录 一、介绍 二、先决条件 三、代码解释 一、介绍 在深度学习领域,构建复杂的神经网络模型可能是一项艰巨的任务,尤其是当您有许多层和操作需要组织时。幸运的是,PyTorch提供了一个方便的工具,称为Sequential API,它简化了神经网络架构的构建过程。在本文中,将探

    2024年02月05日
    浏览(43)
  • pytorch神经网络入门代码

    以下代码测试正确率为:99.37%

    2024年02月20日
    浏览(42)
  • [pytorch入门] 6. 神经网络

    torch.nn: Containers:基本骨架 Convolution Layers: 卷积层 Pooling layers:池化层 Non-linear Activations (weighted sum, nonlinearity):非线性激活 Normalization Layers:正则化层 containers相对重要的一个类,主要给神经网络定义了一些骨架、一些结构,后面那些类都是要向骨架中填充的东西 里面有

    2024年01月25日
    浏览(43)
  • pytorch的卷积层池化层和非线性变化 和机器学习线性回归

    卷积层:   两个输出的情况 就会有两个通道 可以改变通道数的 最简单的神经网络结构: nn.Mudule就是继承父类 super执行的是 先执行父类函数里面的 forward执行的就是前向网络,就是往前推进的,当然也有反向转播,那就是用来就gradient dicent了,求导计算了。 卷积后的结果展

    2024年02月07日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包