PyTorch 中 functional.py 文件介绍

news/2024/10/21 5:23:54/

PyTorch_0">PyTorch

PyTorch 是一个开源的机器学习库,广泛用于计算机视觉和自然语言处理等应用。它由 Facebook 的人工智能研究团队开发,并得到了许多研究机构和企业的支持。PyTorch 以其易用性、灵活性和强大的社区支持而受到欢迎。一些特点如下:

  1. 动态计算图(Dynamic Computation Graphs)PyTorch 使用动态计算图,这意味着图在运行时构建,允许更直观和灵活的模型设计。这与传统的静态图框架(如 TensorFlow 1.x)不同,后者需要在执行前定义整个图。

  2. 自动微分(Automatic Differentiation)PyTorch 提供了自动微分功能,可以自动计算梯度,这对于训练深度学习模型至关重要。

  3. 丰富的APIPyTorch 提供了大量的预定义层、优化器和损失函数,使得模型的构建和训练变得简单。

  4. 多GPU支持PyTorch 支持多GPU训练,可以有效地利用硬件资源,加速模型训练。

  5. 序列化和模型共享PyTorch 允许轻松地保存和加载模型,便于模型的共享和部署。

  6. 社区支持PyTorch 拥有一个活跃的社区,提供了大量的教程、文档和预训练模型。

functional.py

功能介绍

  1. PyTorch 中,torch.nn.functional.py 是一个包含多种函数的模块,这些函数提供了不包含可学习参数的层的实现。这意味着,与 torch.nn.Module 中的层不同,torch.nn.functional.py 中的函数不跟踪梯度或在训练过程中更新参数。这些函数通常用于执行各种操作,如卷积、池化、激活函数、损失函数等。

常用函数

  1. 卷积函数

    • torch.nn.functional.conv1d: 一维卷积函数。
    • torch.nn.functional.conv2d: 二维卷积函数。
    • torch.nn.functional.conv3d: 三维卷积函数。
    • torch.nn.functional.conv_transpose1d, torch.nn.functional.conv_transpose2d, torch.nn.functional.conv_transpose3d: 转置卷积(也称为去卷积)函数。
  2. 池化函数

    • torch.nn.functional.avg_pool1d, torch.nn.functional.avg_pool2d, torch.nn.functional.avg_pool3d: 平均池化函数。
    • torch.nn.functional.max_pool1d, torch.nn.functional.max_pool2d, torch.nn.functional.max_pool3d: 最大池化函数。
    • torch.nn.functional.adaptive_max_pool1d, torch.nn.functional.adaptive_max_pool2d: 自适应最大池化函数。
    • torch.nn.functional.adaptive_avg_pool1d, torch.nn.functional.adaptive_avg_pool2d: 自适应平均池化函数。
  3. 非线性激活函数

    • torch.nn.functional.relu: 修正线性单元(ReLU)激活函数。
    • torch.nn.functional.sigmoid: Sigmoid 激活函数。
    • torch.nn.functional.tanh: 双曲正切激活函数。
  4. 归一化函数

    • torch.nn.functional.batch_norm: 批量归一化函数。
  5. 线性函数

    • torch.nn.functional.linear: 线性变换函数。
  6. Dropout 函数

    • torch.nn.functional.dropout: Dropout 函数。
  7. 距离函数

    • torch.nn.functional.pairwise_distance: 计算两个张量之间的成对距离。
  8. 损失函数

    • torch.nn.functional.cross_entropy: 交叉熵损失函数。
    • torch.nn.functional.binary_cross_entropy: 二进制交叉熵损失函数。
    • torch.nn.functional.nll_loss: 负对数似然损失函数。
  9. 视觉函数

    • torch.nn.functional.pixel_shuffle: 用于将张量重新排列以增加空间分辨率的函数。
    • torch.nn.functional.pad: 用于填充张量的函数。

使用示例

  1. 卷积函数示例
import torch
import torch.nn.functional as F# 创建一个输入张量,假设是一个单通道的28x28图像
input = torch.randn(1, 1, 28, 28)# 定义卷积核的权重和偏置
weight = torch.randn(1, 1, 3, 3)
bias = torch.randn(1)# 使用 F.conv2d 进行卷积操作
output = F.conv2d(input, weight, bias)print(output.shape)  # 输出张量的形状
  1. 池化函数示例
# 使用 F.max_pool2d 进行最大池化,
# 池化(Pooling)是卷积神经网络(CNN)中常用的一种技术,它用于降低特征的空间维度(高和宽),
# 同时保留最重要的信息。池化操作通常在卷积层之后应用,可以减少模型的参数数量和计算量,
# 提高模型的抽象能力,并且有助于提取更具有泛化性的特征。
pooled = F.max_pool2d(input, kernel_size=2)print(pooled.shape)  # 输出张量的形状
  1. 激活函数示例
# 使用 F.relu 作为激活函数
activated = F.relu(input)print(activated.shape)  # 输出张量的形状
  1. 损失函数示例
# 假设我们有一些预测和目标标签
predictions = torch.randn(10)
targets = torch.tensor([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])# 使用 F.cross_entropy 计算交叉熵损失
loss = F.cross_entropy(predictions, targets)print(loss.item())  # 输出损失值
  1. 归一化函数示例
# 假设我们有一个批量的输入数据
inputs = torch.randn(20, 10)# 使用 F.batch_norm 进行批量归一化
output = F.batch_norm(inputs, running_mean=torch.zeros(10), running_var=torch.ones(10))print(output.shape)  # 输出张量的形状
  1. Dropout 函数示例
# 使用 F.dropout 进行dropout操作,正则化技术,Dropout 通过在训练过程中随机“丢弃”(即将输出设置为零)
# 一部分神经元的输出,来减少神经元之间复杂的共适应关系。
dropped = F.dropout(input, p=0.2)print(dropped.shape)  # 输出张量的形状

相关源码

  1. GitHub地址:https://github.com/pytorch/pytorch/blob/main/torch/nn/functional.py

http://www.ppmy.cn/news/1540705.html

相关文章

【openwrt-21.02】Openwrt NAT配置举例

Openwrt NAT配置举例 DNAT Port forwarding for IPv4 (DNAT) 此规则的目标是将端口 2222 上的所有 WAN 端 SSH 访问重定向到 单个 LAN 端工作站的 SSH (22) 端口。 config redirectoption target DNAToption src wanoption dest…

云计算-----单机LNMP结构WordPress网站

LNMP结构 博客网站 day1 小伙伴们,LNMP结构在第一二阶段浅浅的学习过,这里我们可以离线部署该结构。L指(虚拟机)服务器,nginx(前端代理服务器)mysql数据库,最后基于php建设动态…

如何利用动态IP进行数据采集?

在数据驱动的时代,动态IP成为进行高效数据采集的利器。动态IP可以通过频繁更换IP地址避免因频繁访问而受限,从而实现更顺畅的数据获取。本文将详细探讨如何利用动态IP进行数据采集,为企业提升信息获取能力提供实用指导。 如何利用动态IP进行…

前言——25机械考研复试专业面试问题汇总 机械复试超全流程攻略 机械复试看这一个专栏就够用了!机械复试调剂英语自我介绍口语专业面试常见问题总结 机械保研面试

一、开篇寄语: 在准备考研复试的关键时期,许多学弟学妹们往往会寻求各种资料来辅助复习,市面上也因此涌现了大量的“考研复试全流程全攻略”。然而,这些攻略往往存在以下问题: 1、内容不完整性 遗漏关键信息&#x…

OpenCV高级图形用户界面(14)交互式地选择一个或多个感兴趣区域函数selectROIs()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 允许用户在给定的图像上选择多个 ROI。 该函数创建一个窗口,并允许用户使用鼠标来选择多个 ROI。控制方式:使用空格键或…

论文阅读-U3M(2)

HOW MUCH POSITION INFORMATION DO CONVOLUTIONAL NEURAL NETWORKS ENCODE? 文章目录 HOW MUCH POSITION INFORMATION DO CONVOLUTIONAL NEURAL NETWORKS ENCODE?前言一、位置编码网络(PosENet)二、训练数据三、实验3.1 位置信息的存在性3.2 分析PosEN…

【LeetCode每日一题】——523.连续的子数组和

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 前缀和 二【题目难度】 中等 三【题目编号】 523.连续的子数组和 四【题目描述】 给你一个…

第2节 如何学习鸿蒙技术

以下是学习鸿蒙技术的一些途径: 一、官方文档与资源 1. 华为开发者官网 • 这是最权威的学习资源平台。官网提供了详细的鸿蒙操作系统的文档,包括架构介绍、开发指南、API参考等内容。例如,对于初学者来说,可以从入门教程开始&am…