这份指南会将我遇到的 pytorch api 的作用都记录下来, 因此内容会不断更新. 某些非常常用并且简单的就不会在这里列出, 比如说 torch.tensor .

torch.distributions

torch.distributions.categorical

torch.distributions.categorical.Categorical

CLASS

1
torch.distributions.categorical.Categorical(probs=None, logits=None, validate_args=None)

依据参数 probslogits 来采样.

例子:

1
2
3
4
5
6
7
8
9
10
11
m = Categorical(torch.tensor([0.25, 0.25, 0.25, 0.25]))
m.sample() # 在 0, 1, 2, 3 中等概率采样

输出:
tensor(3)

m = Categorical(torch.tensor([[0.25, 0.25, 0.25, 0.25], [0.25, 0.25, 0.25, 0.25]]))
m.sample()

输出:
tensor([0, 2])

参数:

  • prob (Tensor)

    prob 是 $N$ 维向量, 同时采样输出为 $N-1$ 维向量. prob 其中包含的每个 $1$ 维向量为该结果中该位置数据的概率向量.

    注意: prob 必须是非负的, 有限的, 并且和不为 0 . 它会被标准化为和为 1 的形式.

  • logits (Tensor)

    prob 的对数概率版本.

    注意: problogits 不能同时使用.

torch.nn

torch.nn.Identity

CLASS

1
torch.nn.Identity(*args, **kwargs)

建立起一个输入模块, 什么都不做, 一般用于神经网络的输入层.

例子:

1
2
3
4
5
m = nn.Identity(12, 2342, abc=123, asdfasudfio=23452345)  # 随意的参数
m(torch.randn(128, 20)).shape

输出:
torch.Size([128, 20])

参数:

  • 参数是任意的, 并且没有任何影响.

torch.nn.Linear

CLASS

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

用在线性方程 $y=xA^{\mathrm{T}}+b$ 中.

例子:

1
2
3
4
5
6
7
m = nn.Linear(20, 30)
input = torch.randn(128, 20)
output = m(input)
output.shape

输出:
torch.Size([128, 30])

torch.nn.Tanh

CLASS

1
torch.nn.Tanh

用于元素的函数:
$$
\mathrm{Tanh}(x)=\tanh(x)=\frac{\exp(x)-\exp(-x)}{\exp(x)+\exp(-x)}
$$

例子:

1
2
3
4
5
m = nn.Tanh()
m(torch.Tensor([1, 3, 0.5]))

输出:
tensor([0.7616, 0.9951, 0.4621])

torch.nn.Sequential

CLASS

1
torch.nn.Sequential(*args)

一个序列容器.

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
nn.Sequential(
nn.Conv2d(1,20,5),
nn.ReLU(),
nn.Conv2d(20,64,5),
nn.ReLU()
)

输出:
Sequential(
(0): Conv2d(1, 20, kernel_size=(5, 5), stride=(1, 1))
(1): ReLU()
(2): Conv2d(20, 64, kernel_size=(5, 5), stride=(1, 1))
(3): ReLU()
)

from collections import OrderedDict
nn.Sequential(OrderedDict([
('conv1', nn.Conv2d(1,20,5)),
('relu1', nn.ReLU()),
('conv2', nn.Conv2d(20,64,5)),
('relu2', nn.ReLU())
]))

输出:
Sequential(
(conv1): Conv2d(1, 20, kernel_size=(5, 5), stride=(1, 1))
(relu1): ReLU()
(conv2): Conv2d(20, 64, kernel_size=(5, 5), stride=(1, 1))
(relu2): ReLU()
)

torch.optim

方法:

  • optimizer.step()

    在使用 backward() 后可以调用该方法执行一次优化步骤.

    例子:

    1
    2
    3
    4
    5
    6
    for input, target in dataset:
    optimizer.zero_grad()
    output = model(input)
    loss = loss_fn(output, target)
    loss.backward()
    optimizer.step()

torch.optim.Adam

CLASS

1
torch.optim.Adam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0, amsgrad=False)

实现了 Adam 算法