0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

PyTorch已为我们实现了大多数常用的非线性激活函数

人工智能君 来源:人工智能君 作者:人工智能君 2022-07-06 14:47 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

PyTorch已为我们实现了大多数常用的非线性激活函数,我们可以像使用任何其他的层那样使用它们。让我们快速看一个在PyTorch中使用ReLU激活函数的例子:

在上面这个例子中,输入是包含两个正值、两个负值的张量,对其调用ReLU函数,负值将取为0,正值则保持不变。

现在我们已经了解了构建神经网络架构的大部分细节,我们来构建一个可用于解决真实问题的深度学习架构。上一章中,我们使用了简单的方法,因而可以只关注深度学习算法如何工作。后面将不再使用这种方式构建架构,而是使用PyTorch中正常该用的方式构建。

1.PyTorch构建深度学习算法的方式

PyTorch中所有网络都实现为类,创建PyTorch类的子类要调用nn.Module,并实现__init__和forward方法。在init方法中初始化层,这一点已在前一节讲过。在forward方法中,把输入数据传给init方法中初始化的层,并返回最终的输出。非线性函数经常被forward函数直接使用,init方法也会使用一些。下面的代码片段展示了深度学习架构是如何用PyTrorch实现的:

如果你是Python新手,上述代码可能会比较难懂,但它全部要做的就是继承一个父类,并实现父类中的两个方法。在Python中,我们通过将父类的名字作为参数传入来创建子类。init方法相当于Python中的构造器,super方法用于将子类的参数传给父类,我们的例子中父类就是nn.Module。

2.不同机器学习问题的模型架构

待解决的问题种类将基本决定我们将要使用的层,处理序列化数据问题的模型从线性层开始,一直到长短期记忆(LSTM)层。基于要解决的问题类别,最后一层是确定的。使用机器学习或深度学习算法解决的问题通常有三类,最后一层的情况通常如下。

对于回归问题,如预测T恤衫的销售价格,最后使用的是有一个输出的线性层,输出值为连续的。

将一张给定的图片归类为T恤衫或衬衫,用到的是sigmoid激活函数,因为它的输出值不是接近1就是接近0,这种问题通常称为二分类问题。

对于多类别分类问题,如必须把给定的图片归类为T恤、牛仔裤、衬衫或连衣裙,网络最后将使用softmax层。让我们抛开数学原理来直观理解softmax的作用。举例来说,它从前一线性层获取输入,并输出给定数量样例上的概率。在我们的例子中,将训练它预测每个图片类别的4种概率。记住,所有概率相加的总和必然为1。

3.损失函数

一旦定义好了网络架构,还剩下最重要的两步。一步是评估网络执行特定的回归或分类任务时表现的优异程度,另一步是优化权重。

优化器(梯度下降)通常接受一个标量值,因而loss函数应生成一个标量值,并使其在训练期间最小化。某些用例,如预测道路上障碍物的位置并判断是否为行人,将需要两个或更多损失函数。即使在这样的场景下,我们也需要把损失组合成一个优化器可以最小化的标量。最后一章将详细讨论把多个损失值组合成一个标量的真实例子。

上一章中,我们定义了自己的loss函数。PyTorch提供了经常使用的loss函数的实现。我们看看回归和分类问题的loss函数。

回归问题经常使用的loss函数是均方误差(MSE)。它和前面一章实现的loss函数相同。可以使用PyTorch中实现的loss函数,如下所示:

对于分类问题,我们使用交叉熵损失函数。在介绍交叉熵的数学原理之前,先了解下交叉熵损失函数做的事情。它计算用于预测概率的分类网络的损失值,损失总和应为1,就像softmax层一样。当预测概率相对正确概率发散时,交叉熵损失增加。例如,如果我们的分类算法对图3.5为猫的预测概率值为0.1,而实际上这是只熊猫,那么交叉熵损失就会更高。如果预测的结果和真实标签相近,那么交叉熵损失就会更低。

下面是用Python代码实现这种场景的例子。

为了在分类问题中使用交叉熵损失,我们真的不需要担心内部发生的事情——只要记住,预测差时损失值高,预测好时损失值低。PyTorch提供了loss函数的实现,可以按照如下方式使用。

PyTorch包含的其他一些loss函数如表3.1所示。

表3.1

L1 loss 通常作为正则化器使用;第4章将进一步讲述

MSE loss 均方误差损失,用于回归问题的损失函数

Cross-entropy loss 交叉熵损失,用于二分类和多类别分类问题

NLL Loss 用于分类问题,允许用户使用特定的权重处理不平衡数据集

NLL Loss2d 用于像素级分类,通常和图像分割问题有关

4.优化网络架构

计算出网络的损失值后,需要优化权重以减少损失,并改善算法准确率。简单起见,让我们看看作为黑盒的优化器,它们接受损失函数和所有的学习参数,并微量调整来改善网络性能。PyTorch提供了深度学习中经常用到的大多数优化器。如果大家想研究这些优化器内部的动作,了解其数学原理,强烈建议浏览以下博客:

PyTorch提供的一些常用的优化器如下:

ADADELTA

Adagrad

Adam

SparseAdam

Adamax

ASGD

LBFGS

RMSProp

Rprop

SGD

审核编辑 黄昊宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 非线性
    +关注

    关注

    1

    文章

    219

    浏览量

    24211
  • 函数
    +关注

    关注

    3

    文章

    4421

    浏览量

    67822
  • pytorch
    +关注

    关注

    2

    文章

    813

    浏览量

    14921
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    PyTorch 中RuntimeError分析

    原生实现。这是一个已知的 PyTorch 限制,常见于 Stable Diffusion、ComfyUI 等使用 interpolate(..., mode=\'nearest\') 的模型中
    发表于 03-06 06:02

    Pytorch 与 Visionfive2 兼容吗?

    Pytorch 与 Visionfive2 兼容吗? $ pip3 install torch torchvision torchaudio --index-url https
    发表于 02-06 08:28

    嵌入式开发常用函数速查表

    在嵌入式开发中,掌握常用函数的用法可以大大提高开发效率。无论是单片机初学者还是有一定经验的工程师,熟悉函数库和调用方式都是必备技能。今天,我们为大家整理一份嵌入式开发
    的头像 发表于 01-19 09:06 459次阅读
    嵌入式开发<b class='flag-5'>常用</b><b class='flag-5'>函数</b>速查表

    如何用好 C 语言函数的返回值?

    。 C语言也有“行业潜规则”,不过,对于一般的函数大多数C语言程序员常常使用返回值 0 表示成功,非零值表示失败。因此,如果**我们定义的函数能够被
    发表于 12-25 07:17

    非线性矢量网络分析仪双端口校准方法

    传统矢量网络分析仪(VNA)基于线性系统假设,通过S参数表征设备特性。然而,现代通信系统(如5G、雷达)中普遍存在的大功率放大器、混频器等非线性元件,会产生谐波失真、互调干扰等复杂信号行为。非线性校准通过建立误差修正模型,将测量
    的头像 发表于 12-11 17:14 1357次阅读
    <b class='flag-5'>非线性</b>矢量网络分析仪双端口校准方法

    请问C语言开发单片机为什么大多数都采用全局变量的形式?

    C语言代码,大多数都是使用全局变量,也就是用很多函数来操作这些变量,比如函数1把一个全局变量经过一系列复杂的算法计算后改变了这个全局变量的值,然后函数2再拿着
    发表于 12-04 07:47

    电压放大器在非线性超声检测研究中的应用

    通过系统探究激励条件相关变量对非线性超声检测结果的影响,排除干扰因素并筛选出能准确表征碳纤维复合材料损伤的最优激励条件,为后续非线性超声诊断成像研究奠定基础。
    的头像 发表于 11-30 14:29 746次阅读
    电压放大器在<b class='flag-5'>非线性</b>超声检测研究中的应用

    电压放大器在孔道灌浆非线性超声测试实验中的应用

    实验名称:孔道灌浆非线性超声测试原理及系统研究 研究方向:筛选非线性超声测试的适用原理与方法、确定信号处理方法以提取有效谐波特征、搭建非线性超声测试系统、优化关键测试参数以保障检测有效性 实验目的
    的头像 发表于 11-24 15:44 367次阅读
    电压放大器在孔道灌浆<b class='flag-5'>非线性</b>超声测试实验中的应用

    C语言开发单片机为什么大多数都采用全局变量的形式?

    单片机的芯片资源从来都是 “精打细算” 的级别,CPU 主频普遍不高,RAM 总容量本就紧张,分给栈空间的更是少得可怜。要是像普通软件那样,依赖函数返回值传递数据、频繁用局部变量周转,一来二去占用
    的头像 发表于 11-12 14:29 547次阅读
    C语言开发单片机为什么<b class='flag-5'>大多数</b>都采用全局变量的形式?

    激活函数ReLU的理解与总结

    激活函数的作用 神经网络中使用激活函数来加入非线性因素,提高模型的表达能力。 如果不用激励函数
    发表于 10-31 06:16

    电压放大器驱动:非线性超声检测的前沿应用探索

    非线性超声检测技术通过分析超声波在材料中传播时产生的非线性效应,能够捕捉到传统线性超声方法无法识别的微观缺陷和早期损伤,为材料的性能评估提供前所未有的灵敏度。而这项高精尖技术的
    的头像 发表于 10-24 18:10 1354次阅读
    电压放大器驱动:<b class='flag-5'>非线性</b>超声检测的前沿应用探索

    NMSIS库的使用

    核可以提取不同的特征。激活操作是对卷积操作的输出应用一个非线性函数,如ReLU等。激活函数可以增加网络的
    发表于 10-24 09:58

    探索湍流中的非线性连续关系

    流体流动中的湍流行为是经典物理学中最令人关注且最具挑战性的问题之一。大多数流体流动都表现出湍流,湍流在已知宇宙的广泛尺度上发挥着关键作用。其影响范围广泛,从细胞内的微观生物过程和生物体的循环系统,到
    的头像 发表于 10-18 11:34 1611次阅读
    探索湍流中的<b class='flag-5'>非线性</b>连续关系

    线性非线性:工程师必须掌握的Abaqus三大非线性来源

    硕迪科技为您深入剖析Abaqus三大非线性来源:材料非线性、几何非线性、边界条件非线性。掌握工程师必备的非线性分析核心知识,理解复杂工程问题
    的头像 发表于 08-07 18:08 1752次阅读
    从<b class='flag-5'>线性</b>到<b class='flag-5'>非线性</b>:工程师必须掌握的Abaqus三大<b class='flag-5'>非线性</b>来源

    一次消谐器核心功能依赖于其非线性电阻材料

    一次消谐器在电力系统中发挥着至关重要的作用,今天我们来看看它的主要构成材料: 1. 核心材料:非线性电阻的“灵魂” 一次消谐器的核心功能依赖于其非线性电阻材料,主要分为两类:碳化硅(SiC)基:早期
    的头像 发表于 08-02 06:20 1055次阅读
    一次消谐器核心功能依赖于其<b class='flag-5'>非线性</b>电阻材料