Pytorch官方文档(八)翻译版本

torch.nn.Parameter 类

  • 一种被认为是模型参数的Tensor。
  • Paramter是Tensor的子类,它们有非常特殊的属性—即当他们被赋予为模型的属性时,它们被自动地添加到参数列表中(list),并且当调用**parameters()**函数时会返回这些参数的迭代器。指定张量没有这样的效果。这是因为可能需要在模型中缓存一些临时状态,比如RNN的最后一个隐藏状态。如果没有Parameter这样的类,这些临时对象也会被注册。

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))

torch.nn.Sequential 类

  • 一个可以按时序存储的容器。Modules将按在构造函数中传递参数的顺序,将参数添加到容器中。另外,有序的modules也可以传入。

例子:

# Example of using Sequential
model = nn.Sequential(
          nn.Conv2d(1,20,5),
          nn.ReLU(),
          nn.Conv2d(20,64,5),
          nn.ReLU()
        )

# Example of using Sequential with OrderedDict
model = nn.Sequential(OrderedDict([
          ('conv1', nn.Conv2d(1,20,5)),
          ('relu1', nn.ReLU()),
          ('conv2', nn.Conv2d(20,64,5)),
          ('relu2', nn.ReLU())
        ]))

torch.Conv2d

  • 在一个由几个输入组成的信号上,应用一个2维卷积操作。
  • 在最简单的例子里,大小为(N, Cin, H, W)的输入和大小为(N, Cout, Hout, Wout)输出可以被精确地描述为:
    在这里插入图片描述
    在上述公式中,* 代表二维卷积操作符,N 是batch size,C提供了图像通道数,H是输入图像的像素级高度,W是像素级宽度。

参数:

  1. in_channels,输入图像的通道数。
  2. out_channels,卷积后的通道数。
  3. kernel_size,卷积核的大小。
  4. stride(可选),卷积操作的步长,默认是1。
  5. padding(可选),在输入的所有边填0,默认是0。
  6. padding_mode(可选),零。
  7. dilation(可选),卷积核元素之间的空隙,默认是1。
  8. groups(可选),从输入通道到输出通道之间块连接的数量。
  9. bias(可选),如果值为True,添加一个可学习的bias到输出上,默认True。
    在这里插入图片描述

官方例子:

>>> # With square kernels and equal stride
>>> m = nn.Conv2d(16, 33, 3, stride=2)
>>> # non-square kernels and unequal stride and with padding
>>> m = nn.Conv2d(16, 33, (3, 5), stride=(2, 1), padding=(4, 2))
>>> # non-square kernels and unequal stride and with padding and dilation
>>> m = nn.Conv2d(16, 33, (3, 5), stride=(2, 1), padding=(4, 2), dilation=(3, 1))
>>> input = torch.randn(20, 16, 50, 100)
>>> output = m(input)

自己的例子:
(Model.py)

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

class Model(nn.Module):
    def __init__(self):
        super(Model, self).__init__()
        # Conv2d 三个参数:1)in_channels;2)out_channels;3)kernel_size;4)stride=15)padding=0
        # 6)dilation=False;7)groups=18)bias=True
        self.conv1 = nn.Conv2d(3, 20, 3)
        self.conv2 = nn.Conv2d(20, 20, 3)
        # BatchNorm2d() 参数:channels 作用:正则化防止参数过多
        self.normal = nn.BatchNorm2d(20)

    def forward(self, x):
        x = self.conv1(x)
        x = self.conv2(x)
        x == self.normal(x)
        x = F.relu(x)
        return x

(train.py)

import model
import torch

model = model.Model()

test = torch.rand(1, 3, 7, 7)
print('Size before: ')
print(test.size())

x = model(test)

print('Size after: ')
print(x.size())

输出:

Size before: 
torch.Size([1, 3, 7, 7])
Size after: 
torch.Size([1, 20, 3, 3])
发布了14 篇原创文章 · 获赞 6 · 访问量 593

猜你喜欢

转载自blog.csdn.net/qq_38883844/article/details/104186882
今日推荐