当前位置: 首页 > news >正文

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, Sigmoidclass 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 = dataoutput_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 += 1writer.close()

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

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

参考资料:

视频教程:PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】

相关文章:

  • QT之多个界面相互切换 (stackedWidget控件)
  • 基于 golang 从零到一实现时间轮算法 (一)
  • uniapp书写顶部选项卡代码详细例子
  • 在Spring中,教你一招优雅的获取国际化语言配置的方法
  • 接口测试 —— Jmeter读取数据库数据作测试参数
  • 运维人必知必会的10个问题,不知道的快来补课!
  • NEFU数字图像处理(3)图像分割
  • HarmonyOS开发:基于http开源一个网络请求库
  • 双热点机制结合。5+铜死亡+铁死亡相关基因生信思路
  • 求职中遇到的性格测试,你看不出来的陷阱
  • 【面试精选】00后卷王带你三天刷完软件测试面试八股文
  • 开源播放器GSYVideoPlayer的简单介绍及播放rtsp流的优化
  • Java零基础入门-注释
  • Mac PS2023/2024储存窗口黑屏不显示 解决方法
  • 【正则表达式】中的“\b“
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • conda常用的命令
  • ECMAScript入门(七)--Module语法
  • HTML中设置input等文本框为不可操作
  • java第三方包学习之lombok
  • php面试题 汇集2
  • text-decoration与color属性
  • webpack+react项目初体验——记录我的webpack环境配置
  • 大数据与云计算学习:数据分析(二)
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 多线程 start 和 run 方法到底有什么区别?
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 力扣(LeetCode)21
  • 免费小说阅读小程序
  • 如何实现 font-size 的响应式
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 新版博客前端前瞻
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 硬币翻转问题,区间操作
  • 怎么将电脑中的声音录制成WAV格式
  • 自定义函数
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • #HarmonyOS:Web组件的使用
  • #Linux(帮助手册)
  • #QT(串口助手-界面)
  • (¥1011)-(一千零一拾一元整)输出
  • (pojstep1.1.2)2654(直叙式模拟)
  • (windows2012共享文件夹和防火墙设置
  • (动态规划)5. 最长回文子串 java解决
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (四) Graphivz 颜色选择
  • (四)汇编语言——简单程序
  • (一)u-boot-nand.bin的下载
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)socket Aio demo