一些用到的Pytorch知识点的总结(2)

都是一些基础的函数,在这里记下当作笔记以后好查。大部分都是官方文档的翻译,贴的有地址


nn.Embedding.weight

torch.nn.Embedding文档
生成的Embedding的weight属性,如果不给weight赋值,Embedding类会自动初始化,符合正态分布(0, 1)
Pytorch的默认初始化分布 nn.Embedding.weight初始化分布。

import torch.nn as nn
b = nn.Embedding(2, 3)
b.weight
-------------------------------------------------------
outputs:
Parameter containing:
tensor([[-1.2576, -1.1761,  0.8217],
        [ 2.4802, -0.7803,  0.0659]], requires_grad=True)

nn.Module.register_buffer

nn.Module.register_buffer文档

向模块添加持久缓冲区

这通常用于注册一个不应该被视为模型参数的缓冲区。例如,BatchNorm的running_mean不是一个参数,但是是模型状态的一部分
默认情况下,缓冲区是持久的,并将与参数一起保存,可以通过将persistent设置为False来更改此行为。
持久缓冲区和非持久缓冲区之间的唯一区别是,后者不会成为这个模块的state_dict的一部分。

缓冲区可以使用给定名称行为属性进行访问

nn.module与nn.Sequential

torch.nn.Module文档
class torch.nn.Module

是所有神经网络模块的基类。
你的模型应该是这个类的子类。
模块还可以包括其他模块,允许将它们嵌套在树形结构中。你可以将子模块指定为常规属性

例子:

import torch.nn as nn
import torch.nn.functional as F

class Model(nn.Module):
    def __init__(self):
        super(Model, self).__init__()
        self.conv1 = nn.Conv2d(1, 20, 5)
        self.conv2 = nn.Conv2d(20, 20, 5)
        
    def forward(self, x):
        x = F.relu(self.conv1(x))
        return F.relu(self.conv2(x))

以这种方式分配的子模块将被注册,并且在调用to()等时,也将转换它们的参数。

torch.nn.Sequential文档
CLASS torch.nn.Sequential(*args)

一个sequential容器,模块将会按照它们在构造函数中传递的顺序添加到它中。
另外,也可以传入一个有序的模块字典。

为了更容易理解,这里有一个小例子:

# 使用Sequential
model = nn.Sequential(
            nn.Conv2d(1, 20, 5),
            nn.ReLU(),
            nn.Conv2d(20, 64, 5),
            nn.ReLU
        )
        
# 使用OrderedDict在Sequential
model = nn.Sequential(OrderedDict([
            ('conv1', nn.Conv2d(1, 20, 5)),
            ('relu1', nn.ReLU()),
            ('conv2', nn.Conv2d(20, 64, 5)),
            ('relu2', nn.ReLU())
            ]))

nn.Linear

nn.linear文档

CLASS torch.nn.Linear(in_features, out_features, bias=True)

对输入数据应用线性转换:y = xA^T + b
支持 TensorFloat32

示例:

 m = nn.Linear(20, 30)
 input = torch.randn(128, 20)
 output = m(input)
 print(output.size())
 # torch.Size([128, 30])

nn.Dropout

这里看原文吧
nn.Dropout文档
在训练时,使用伯努利分布的,以概率p随机地将输入张量的一些元素置为0.
每一个chennel将在前向传播中独立清零。这已被证明是一种有效的正则化技术,阻止过拟合。
此外, 在训练期间这个输出时被1/(1-p)的因子缩放。这意味着在评估期间,这模块简单计算一个独立函数

示例:

m = nn.Dropout(p=0.2)
input = torch.randn(20, 16)
output = m(input)

torch.equal与torch.eq

torch.equal(input, other) → bool

如果两个tensor大小和元素相同返回True, 否则返回False
torch.equal(torch.tensor([1, 2]), torch.tensor([1, 2]))

torch.eq

torch.eq(input, other, *, out=None) → Tensor
按照位置计算元素是否相等。
第二个参数可以是一个数字或一个张量,其形状可以与第一个参数一起传播。
return 一个boolean的tensor

示例:

torch.eq(torch.tensor([[1, 2], [3, 4]]), torch.tensor([[1, 1], [4, 4]]))
# tensor([[ True, False],
#         [False, True]])
# True

总结

小笔记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Windows操作系统下,同样可以使用PyTorch进行深度学习相关的计算。以下是一些PyTorch的基本知识点: 1. 安装PyTorch:在Windows上安装PyTorch可以通过pip或conda包管理器进行。可以在PyTorch官方网站上找到相应的安装指南。 2. 张量(Tensors):PyTorch中的核心数据结构是张量,它类似于NumPy的多维数组。张量可以用来存储和操作数据。 3. 自动求导(Autograd):PyTorch通过自动求导技术,可以自动计算张量上的梯度。这使得在神经网络训练中的反向传播算法更加方便。 4. 神经网络模块(nn.Module):PyTorch提供了一个模块化的接口(nn.Module),用于构建神经网络模型。可以定义各种层、损失函数、优化器等。 5. 数据加载(Data Loading):PyTorch提供了一些工具,用于加载和预处理数据。可以使用内置的数据集类或自定义数据集类来加载和处理数据。 6. 训练模型:使用PyTorch可以定义训练循环,包括前向传播、计算损失、反向传播和参数更新等步骤。可以使用不同的优化器(如SGD、Adam等)来更新模型参数。 7. GPU加速:PyTorch支持在GPU上进行计算,可以使用CUDA来利用GPU进行并行计算,加速模型训练和推理。 这些是PyTorch的一些基本知识点,在实际应用中还有更多的功能和技术可以探索和学习。可以参考PyTorch的官方文档和示例代码来深入学习和使用PyTorch
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值