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

PyTorch中nn-XXX与F-XXX的区别

nn.XXX与F.XXX

PyTorch中torch.nn**(以下简写为nn)中的模块和torch.nn.functional(以下简写为F)**中的模块都提供了常用的神经网络操作,包括激活函数、损失函数、池化操作等。它们的主要区别如下:

  • nn中的模块是以类形式存在的;F中的模块是以函数形式存在的
  • nn中的模块是nn.Module的子类,包含可学习参数、可导,在反向传播中可以计算梯度,可以在模型中作为子模块使用;F中的模块是纯函数,没有与之相关联的可学习参数,虽然也可以用于反向传播,但是其梯度需要手动计算
  • nn中的模块需要实例化后,将张量作为实例的调用参数;F中的模块直接传递张量作为参数
  • nn中的模块可以管理和访问模块的内部参数和状态;F中的函数是纯函数,没有与之相关联的参数或状态,因此无法直接管理和访问函数的内部状态

nn.Relu与F.relu()

以激活函数ReLu为例,在使用激活函数时,有以下两种方式可以使用:

# 方法一
nn.ReLU()
# 方法二
F.relu(input)

这两种方法都是使用ReLu激活,但使用的场景不一样。

  • nn.ReLU是一个类,必须实例化后才能使用,一般在定义网络层的时候使用

    # nn.ReLU的常用方法
    nn.Sequential(nn.Conv2d(in_channels, out_channels),nn.ReLU(inplace=True))
    
  • F.relu()是函数调用,一般使用在foreward()函数

  • nn.ReLU只能处理Variable类型的张量;而F.relu()可以处理Tensor和Variable类型的张量

  • nn.ReLU需要额外占用内存用来存储中间结果;而F.relu()则是直接在原张量上进行操作,不需要额外的内存占用

另外:

  • 当用print()打印输出神经网络时,会输出nn.ReLU()层,而F.relu()是没有输出的
http://www.lryc.cn/news/111036.html

相关文章:

  • zookeeper集群和kafka的相关概念就部署
  • 第4集丨Vue 江湖 —— 计算属性
  • Docker 容器化学习
  • springboot第34集:ES 搜索,nginx
  • 微信小程序中的分包使用介绍
  • 【云原生】K8S二进制搭建二:部署CNI网络组件
  • 【iOS】—— 离屏渲染
  • 基于人工智能的中医图像分类系统设计与实现
  • spring security + oauth2 使用RedisTokenStore 以json格式存储
  • css position: sticky;实现上下粘性布局,中间区域滚动
  • 解密HTTP代理爬虫中的IP代理选择与管理策略
  • pytorch入门
  • Redis | 主从模式
  • C# Blazor 学习笔记(8):row/col布局开发
  • 金融供应链智能合约 -- 智能合约实例
  • 论文《Contrastive Meta Learning with Behavior Multiplicity for Recommendation》阅读
  • K8S 部署 RocketMQ
  • [Docker]入门之docker-compose
  • SAP ABAP中使用函数ALSM_EXCEL_TO_INTERNAL_TABLE读取EXCEL中不同的SHEET数据
  • Rust 编程小技巧摘选(6)
  • 如何保证Redis缓存和数据库的一致性问题
  • 【数据分析入门】人工智能、数据分析和深度学习是什么关系?如何快速入门 Python Pandas?
  • JavaScript 里三个点 ... 的用法
  • Linux修改系统语言
  • Spring注解开发
  • 图像处理库(Opencv, Matplotlib, PIL)以及三者之间的转换
  • html+Vue+封装axios实现发送请求
  • GoogLeNet卷积神经网络输出数据形参分析-笔记
  • 【docker】dockerfile发布springboot项目
  • 利用docker run -v 命令实现使用宿主机中没有的命令