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是像素级宽度。
参数:
- in_channels,输入图像的通道数。
- out_channels,卷积后的通道数。
- kernel_size,卷积核的大小。
- stride(可选),卷积操作的步长,默认是1。
- padding(可选),在输入的所有边填0,默认是0。
- padding_mode(可选),零。
- dilation(可选),卷积核元素之间的空隙,默认是1。
- groups(可选),从输入通道到输出通道之间块连接的数量。
- 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=1;5)padding=0
# 6)dilation=False;7)groups=1;8)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])