1.torch
1.1 张量tensors
1.1.1 torch.ones()
torch.ones(sizes, out=None) → Tensor
返回一个全为1 的张量,形状由可变参数sizes定义。
torch.zeros(sizes, out=None) → Tensor
返回一个全为0的张量,形状由可变参数sizes定义。
1.1.2 torch.rand()
torch.rand(sizes, out=*None) → Tensor
返回一个张量,包含了从区间[0,1)的均匀分布中抽取的一组随机数
1.2 数学操作
1.2.1 torch.lerp() 线性插值
torch.lerp(start, end, weight, out=None)
对两个张量以 start,end 做线性插值, 将结果返回到输出张量。
1.2.2 torch.mean() 均值
torch.mean(input, dim, out=None) → Tensor
返回输入张量给定维度dim上每行的均值。
>>> a = torch.randn(4, 4)
>>> a
-1.2738 -0.3058 0.1230 -1.9615
0.8771 -0.5430 -0.9233 0.9879
1.4107 0.0317 -0.6823 0.2255
-1.3854 0.4953 -0.2160 0.2435
[torch.FloatTensor of size 4x4]
>>> torch.mean(a, 1)
-0.8545
0.0997
0.2464
-0.2157
[torch.FloatTensor of size 4x1]
1.2.3 torch.sort() 没看懂
torch.sort(input, dim=None, descending=False, out=None) -> (Tensor, LongTensor)
对输入张量 input 沿着指定维按升序排序。如果指定参数 descending为 True,则按降序排序
如果不给定dim,则默认为输入的最后一维。
>>> x = torch.randn(3, 4)
>>> sorted, indices = torch.sort(x)
>>> sorted
-1.6747 0.0610 0.1190 1.4137
-1.4782 0.7159 1.0341 1.3678
-0.3324 -0.0782 0.3518 0.4763
[torch.FloatTensor of size 3x4]
>>> indices
0 1 3 2
2 1 0 3
3 1 0 2
[torch.LongTensor of size 3x4]
>>> sorted, indices = torch.sort(x, 0)
>>> sorted
-1.6747 -0.0782 -1.4782 -0.3324
0.3518 0.0610 0.4763 0.1190
1.0341 0.7159 1.4137 1.3678
[torch.FloatTensor of size 3x4]
>>> indices
0 2 1 2
2 0 2 0
1 1 0 1
[torch.LongTensor of size 3x4]
4. torch.nn
4.1 torch.nn.Module
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)# submodule: Conv2d
self.conv2 = nn.Conv2d(20, 20, 5)
def forward(self, x):
x = F.relu(self.conv1(x))
return F.relu(self.conv2(x))
nn.add_module()
import torch.nn as nn
class Model(nn.Module):
def __init__(self):
super(Model, self).__init__()
self.add_module("conv", nn.Conv2d(10, 20, 4))
# self.conv = nn.Conv2d(10, 20, 4) 和上面这个增加module的方式等价
model = Model()
print(model.conv)