深度学习之pytorch 中 torch.nn介绍

这篇具有很好参考价值的文章主要介绍了深度学习之pytorch 中 torch.nn介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. torch.nn 介绍

pytorch 中必用的包就是 torch.nn,torch.nn 中按照功能分,主要如下有几类:

1. Layers(层):包括全连接层、卷积层、池化层等。
2. Activation Functions(激活函数):包括ReLU、Sigmoid、Tanh等。
3. Loss Functions(损失函数):包括交叉熵损失、均方误差等。
4. Optimizers(优化器):包括SGD、Adam、RMSprop等。
5. Initialization Functions(初始化函数):包括Xavier初始化、He初始化等。
6. Utilities(实用工具):包括数据处理的函数、模型构建的函数等。

2. Layers(层):

2.1 全连接层

在 `torch.nn` 中,全连接层的函数主要包括以下几个:
1. `torch.nn.Linear(in_features, out_features, bias=True)`: 创建一个线性层,其中in_features是输入特征的大小,out_features是输出特征的大小,bias表示是否使用偏置。
2. `torch.nn.Bilinear(in1_features, in2_features, out_features, bias=True)`: 创建一个双线性层,用于计算两组输入之间的双线性操作。
这些函数用于创建神经网络中的全连接层,其中 `torch.nn.Linear` 是应用最广泛的全连接层函数。

2.2 卷积层

在 `torch.nn` 中,卷积层的函数主要包括以下几个:
1. `torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)`: 创建一维卷积层。
2. `torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)`: 创建二维卷积层。
3. `torch.nn.Conv3d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)`: 创建三维卷积层。
这些函数用于创建神经网络中的卷积层。

2.3 池化层

在 `torch.nn` 中,池化层的函数主要包括以下几个:
1. `torch.nn.MaxPool1d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)`: 创建一维最大池化层。
2. `torch.nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)`: 创建二维最大池化层。
3. `torch.nn.MaxPool3d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)`: 创建三维最大池化层。
4. `torch.nn.AvgPool1d(kernel_size, stride=None, padding=0, ceil_mode=False, count_include_pad=True)`: 创建一维平均池化层。
5. `torch.nn.AvgPool2d(kernel_size, stride=None, padding=0, ceil_mode=False, count_include_pad=True, divisor_override=None)`: 创建二维平均池化层。
6. `torch.nn.AvgPool3d(kernel_size, stride=None, padding=0, ceil_mode=False, count_include_pad=True, divisor_override=None)`: 创建三维平均池化层。
这些函数用于创建神经网络中的不同类型的池化层。

3. Activation Functions(激活函数)

在 `torch.nn` 中,常见的激活函数包括:
1. `torch.nn.ReLU`: ReLU激活函数。
2. `torch.nn.ReLU6`: 限制线性整流激活函数,将负值截断为0,将正值截断为6。
3. `torch.nn.ELU`: 指数线性单元激活函数。
4. `torch.nn.Sigmoid`: Sigmoid激活函数。
5. `torch.nn.Tanh`: 双曲正切激活函数。
6. `torch.nn.Softmax`: Softmax激活函数,常用于多分类问题。
这些激活函数可用于神经网络的不同层中,以引入非线性特性和增加网络的表达能力。

4. Loss Functions(损失函数)

在 `torch.nn` 中,常见的损失函数包括:
1. `torch.nn.MSELoss`: 均方误差损失函数,用于回归问题。
2. `torch.nn.L1Loss`: 平均绝对误差损失函数,也用于回归问题。
3. `torch.nn.CrossEntropyLoss`: 交叉熵损失函数,通常用于多分类问题。
4. `torch.nn.NLLLoss`: 负对数似然损失函数,结合了LogSoftmax和负对数似然损失,通常用于多分类问题。
5. `torch.nn.BCELoss`: 二元交叉熵损失函数,通常用于二分类问题。
6. `torch.nn.BCEWithLogitsLoss`: 结合了Sigmoid和二元交叉熵损失的函数,通常用于二分类问题。
这些损失函数可以帮助定义神经网络的训练目标,并用于计算预测值与真实标签之间的误差。

5、Optimizers(优化器)

在 `torch.nn` 中,常见的优化器函数包括:
1. `torch.optim.SGD`: 随机梯度下降优化器。
2. `torch.optim.Adam`: Adam优化器,结合了动量和自适应学习率。
3. `torch.optim.Adagrad`: 自适应学习率优化器。
4. `torch.optim.RMSprop`: RMSprop优化器,结合了动量和自适应学习率。
5. `torch.optim.Adadelta`: Adadelta优化器,自适应学习率方法之一。
6. `torch.optim.Adamax`: Adamax优化器,基于Adam算法的变种。
这些优化器函数可用于调整神经网络的参数以最小化定义的损失函数,从而实现模型的训练和优化。

6. Initialization Functions(初始化函数)

在 `torch.nn` 中,常见的初始化函数包括:
1. `torch.nn.init.uniform_`: 均匀分布初始化。
2. `torch.nn.init.normal_`: 正态分布初始化。
3. `torch.nn.init.constant_`: 常数初始化。
4. `torch.nn.init.eye_`: 单位矩阵初始化。
5. `torch.nn.init.xavier_uniform_`: Xavier均匀分布初始化。
6. `torch.nn.init.xavier_normal_`: Xavier正态分布初始化。
7. `torch.nn.init.kaiming_uniform_`: Kaiming均匀分布初始化(用于ReLU激活函数)。
8. `torch.nn.init.kaiming_normal_`: Kaiming正态分布初始化(用于ReLU激活函数)。
这些初始化函数可用于初始化神经网络的权重和偏置,以帮助训练神经网络时更好地收敛和避免梯度消失或梯度爆炸等问题。

7. Utilities(实用工具)

在 `torch.nn` 中,有一些实用的工具函数,包括但不限于:
1. `torch.nn.functional.conv2d`: 二维卷积操作。
2. `torch.nn.functional.linear`: 线性变换,等同于全连接层。
3. `torch.nn.functional.relu`: ReLU激活函数。
4. `torch.nn.functional.max_pool2d`: 二维最大池化操作。
5. `torch.nn.functional.dropout`: 随机失活操作。
6. `torch.nn.functional.cross_entropy`: 交叉熵损失函数。
7. `torch.nn.functional.mse_loss`: 均方误差损失函数。
8. `torch.nn.functional.softmax`: softmax函数,常用于多分类问题。
这些工具函数提供了在神经网络中常见的操作,用于构建神经网络结构和定义损失函数。

8、其他

8.1 torch.nn.Conv2d 与 torch.nn.functional.conv2d 的区别

`torch.nn.Conv2d` 是一个类,用于创建二维卷积层,它是 PyTorch 中的一个模块。而 `torch.nn.functional.conv2d` 是一个函数,用于执行二维卷积操作。
区别在于:
- `torch.nn.Conv2d` 是一个类,它是一个包含可学习参数的卷积层,可以包含权重和偏置项,并且具有其他卷积层相关的属性和方法。
- `torch.nn.functional.conv2d` 是一个函数,它执行卷积操作,但是它不包含可学习的参数,需要手动输入卷积核和偏置项,通常用于在自定义的网络结构或者函数中执行卷积操作。


以下是它们的使用示例:
使用 `torch.nn.Conv2d` 创建一个简单的卷积层:

import torch
import torch.nn as nn
# 创建一个二维卷积层
conv_layer = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, stride=1, padding=1)
# 定义输入数据
input_data = torch.randn(1, 3, 32, 32)  # (batch_size, channels, height, width)
# 通过卷积层进行前向传播
output = conv_layer(input_data)
print(output.shape)  # 输出结果的形状

使用 `torch.nn.functional.conv2d` 执行二维卷积操作:

import torch
import torch.nn.functional as F
# 定义输入数据
input_data = torch.randn(1, 3, 32, 32)  # (batch_size, channels, height, width)
# 定义卷积核
weight = torch.randn(16, 3, 3, 3)  # (out_channels, in_channels, kernel_height, kernel_width)
# 执行二维卷积操作
output = F.conv2d(input_data, weight, bias=None, stride=1, padding=1)
print(output.shape)  # 输出结果的形状

8.2 torch.nn.Linear 与torch.nn.functional.linear的区别

`torch.nn.Linear` 是一个类,用于创建全连接层(也称为线性层),它是 PyTorch 中的一个模块。而 `torch.nn.functional.linear` 是一个函数,用于执行线性变换操作。
区别在于:
- `torch.nn.Linear` 是一个类,它是一个包含可学习参数的全连接层,可以包含权重和偏置项,并且具有其他全连接层相关的属性和方法。
- `torch.nn.functional.linear` 是一个函数,它执行线性变换操作,但是它不包含可学习的参数,需要手动输入权重和偏置项,通常用于在自定义的网络结构或者函数中执行线性变换操作。


下面是它们的使用示例:
使用 `torch.nn.Linear`:

import torch
import torch.nn as nn
# 创建一个线性变换模块
linear_module = nn.Linear(in_features=5, out_features=3)
# 构造输入张量
input_data = torch.randn(2, 5)  # 2个样本,每个样本5个特征
# 应用线性变换
output = linear_module(input_data)


使用 `torch.nn.functional.linear`:

import torch
import torch.nn.functional as F
# 构造输入张量和权重
input_data = torch.randn(2, 5)  # 2个样本,每个样本5个特征
weight = torch.randn(3, 5)      # 权重矩阵
# 应用线性变换
output = F.linear(input_data, weight)


在这两个示例中,都创建了输入数据并应用了线性变换,但是 `torch.nn.Linear`更适合用于创建神经网络模型,而 `torch.nn.functional.linear` 更适合在自定义的前向传播函数中使用。文章来源地址https://www.toymoban.com/news/detail-835159.html

到了这里,关于深度学习之pytorch 中 torch.nn介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 人工智能概论报告-基于PyTorch的深度学习手写数字识别模型研究与实践

    本文是我人工智能概论的课程大作业实践应用报告,可供各位同学参考,内容写的及其水,部分也借助了gpt自动生成,排版等也基本做好,大家可以参照。如果有需要word版的可以私信我,或者在评论区留下邮箱,我会逐个发给。word版是我最后提交的,已经调整统一了全文格

    2024年02月05日
    浏览(69)
  • 人工智能深度学习100种网络模型,精心整理,全网最全,PyTorch框架逐一搭建

    大家好,我是微学AI,今天给大家介绍一下人工智能深度学习100种网络模型,这些模型可以用PyTorch深度学习框架搭建。模型按照个人学习顺序进行排序: 深度学习模型 ANN (Artificial Neural Network) - 人工神经网络:基本的神经网络结构,包括输入层、隐藏层和输出层。 学习点击地

    2024年02月14日
    浏览(50)
  • 人工智能学习07--pytorch20--目标检测:COCO数据集介绍+pycocotools简单使用

    如:天空 coco包含pascal voc 的所有类别,并且对每个类别的标注目标个数也比pascal voc的多。 一般使用coco数据集预训练好的权重来迁移学习。 如果仅仅针对目标检测object80类而言,有些图片并没有标注信息,或者有错误标注信息。所以在实际的训练过程中,需要对这些数据进行

    2024年02月12日
    浏览(60)
  • 深度学习实战24-人工智能(Pytorch)搭建transformer模型,真正跑通transformer模型,深刻了解transformer的架构

    大家好,我是微学AI,今天给大家讲述一下人工智能(Pytorch)搭建transformer模型,手动搭建transformer模型,我们知道transformer模型是相对复杂的模型,它是一种利用自注意力机制进行序列建模的深度学习模型。相较于 RNN 和 CNN,transformer 模型更高效、更容易并行化,广泛应用于神

    2023年04月22日
    浏览(58)
  • 人工智能-深度学习之延后初始化

    到目前为止,我们忽略了建立网络时需要做的以下这些事情: 我们定义了网络架构,但没有指定输入维度。 我们添加层时没有指定前一层的输出维度。 我们在初始化参数时,甚至没有足够的信息来确定模型应该包含多少参数。 有些读者可能会对我们的代码能运行感到惊讶。

    2024年02月05日
    浏览(37)
  • 【深度学习】多卡训练__单机多GPU方法详解(torch.nn.DataParallel、torch.distributed)

    多GPU训练能够加快模型的训练速度,而且在单卡上不能训练的模型可以使用多个小卡达到训练的目的。 多GPU训练可以分为单机多卡和多机多卡这两种,后面一种也就是分布式训练——训练方式比较麻烦,而且要关注的性能问题也有很多,据网上的资料有人建议能单机训练最好

    2024年02月02日
    浏览(36)
  • Pytorch:torch.nn.Module

    torch.nn.Module 是 PyTorch 中神经网络模型的基类,它提供了模型定义、参数管理和其他相关功能。 以下是关于 torch.nn.Module 的详细说明: 1. torch.nn.Module 的定义: torch.nn.Module 是 PyTorch 中所有神经网络模型的基类,它提供了模型定义和许多实用方法。自定义的神经网络模型应该继

    2024年01月16日
    浏览(45)
  • 【Pytorch】torch.nn.LeakyReLU()

    Hello! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~   ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计算机专业,获得过国家奖学金,有幸在竞赛中拿过一些国奖、省奖…已保研 学习经验:扎实基础 + 多做

    2024年02月02日
    浏览(34)
  • AI写作革命:PyTorch如何助力人工智能走向深度创新

    身为专注于人工智能研究的学者,我十分热衷于分析\\\"AI写稿\\\"与\\\"PyTorch\\\"这两项领先技术。面对日益精进的人工智能科技,\\\"AI写作\\\"已不再是天方夜谭;而\\\"PyTorch\\\"如璀璨明珠般耀眼,作为深度学习领域的尖端工具,正有力地推进着人工智能化进程。于此篇文章中,我将详细解析\\\"

    2024年04月13日
    浏览(51)
  • Pytorch-----torch.nn.Module.modules()

    在使用pytorch构建神经网络时,定义的网络模型必须要继承自torch.nn.Module这一父类。在Module类中,有一个函数可以返回网络中所有模块的迭代器。这就是torch.nn.Module.modules() 提示:以下是本篇文章正文内容,下面案例可供参考 源码中的解释如下: 不只是返回网络中的某一层,

    2024年02月14日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包