1. 网络层容器(Containers)

上一节我们学习了如何构建一个LeNet,回顾代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import torch.nn as nn
import torch.nn.functional as F

class LeNet(nn.Module):
def __init__(self, classes):
super(LeNet, self).__init__()
self.conv1 = nn.Conv2d(3, 6, 5)
self.conv2 = nn.Conv2d(6, 16, 5)
self.fc1 = nn.Linear(16*5*5, 120)
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, classes)

def forward(self, x):
out = F.relu(self.conv1(x))
out = F.max_pool2d(out, 2)
out = F.relu(self.conv2(out))
out = F.max_pool2d(out, 2)
out = out.view(out.size(0), -1)
out = F.relu(self.fc1(out))
out = F.relu(self.fc2(out))
out = self.fc3(out)
return out

__init__(self, classes)中实现了网络层的初始化,在forward(self, x)中完成了前向传播。

如果我们可以给网络层再进行分类,把网络层放到不同的容器里,那么可以方便我们构建网络。

阅读全文 »

1. 网络模型创建步骤

前几次已经学完了数据部分,现在开始学习模型部分。

image-20200727224448921

模型又分为模型创建和权值初始化。其中,模型创建还可以进一步分为构建网络层和拼接网络层。这些工作都可以用nn.Module来完成。

阅读全文 »

通过import torchvision.transforms as transforms导入pytorch的计算机视觉包torchvision中的transforms模块。

torchvision 包由流行的数据集、模型体系结构和用于计算机视觉的常见图像转换组成

image-20200724104816574

阅读全文 »

1. 为什么要DataSet和DataLoader

image-20200721221026985

相比一次喂入全部数据的方法,我们更希望使用小批次的方法。把一轮数据全部训练一次称为一个Epoch,一个Epoch分为若干次Iteration,每次Iteration的数据量为一个Batch-Size。通过这种方法,可以有效地加快训练速度,避免显卡内存爆炸。

使用DataSet和DataLoader可以帮助我们进行小批次训练。

阅读全文 »

1. torch.autograd.backward

1
2
3
4
5
torch.autograd.backward(tensors, 
grad_tensors=None,
retain_graph=None,
create_graph=False,
grad_variables=None)

功能:自动求取梯度

  • tensors: 用于求导的张量,如 loss
  • retain_graph : 保存计算图
  • create_graph : 创建导数计算图,用于高阶求导
  • grad_tensors:多梯度权重
阅读全文 »

1. 计算图

1.1 用计算图表示:

image-20200721135913837

计算图是用来描述运算的有向无环图,计算图有两个主要元素:结点(Node)和边(Edge)

结点表示数据,如向量,矩阵,张量,边表示运算,如加减乘除卷积等

y=(x+w)(w+1)a=x+wb=w+1y=aby = (x+ w) * (w+1)\\ a = x + w \\ b = w + 1\\ y = a * b

阅读全文 »
0%