VGG块 经典卷积神经网络的基本组成部分是下面的这个序列: 带填充以保持分辨率的卷积层; 非线性激活函数,如ReLU; 汇聚层,如最大汇聚层。 而一个
模型结构 总体来看,(LeNet(LeNet-5)由两个部分组成:) 卷积编码器:由两个卷积层组成; 全连接层密集块:由三个全连接层组成。 import torch from torch
池化的意义 降低卷积层对位置的敏感性 同时降低对空间降采样表示的敏感性。 最大池化和平均池化 与卷积层类似,通过滑动窗口,选择最大值为最大池化,计算
图像的性质 平移性 不管检测对象出现在图像中的哪个位置,神经网络的前面几层应该对相同的图像区域具有相似的反应,即为“平移不变性”。 局部性 神经网络
多通道输入 单通道输出" 单通道输出 当输入包含多个通道时,需要构造一个与输入数据具有相同输入通道数的卷积核,以便与输入数据进行互相关运算。假设输
填充 填充即是在输入图像的边界填充元素(通常填充元素是 $0$ ) 卷积神经网络中卷积核的高度和宽度通常为奇数,例如1、3、5或7。 选择奇数的好处是,保
互相关运算 严格来说,卷积层是个错误的叫法,因为它所表达的运算其实是互相关运算(cross-correlation),而不是卷积运算。 图像卷积
加载和保存张量 import torch from torch import nn from torch.nn import functional as F x = torch.arange(4) torch.save(x, 'x-file') x2 = torch.load('x-file') 使用torch.save 和torch.load 来保存和读取张量,也可保存列表和字典 y =
不带参数的层 import torch import torch.nn.functional as F from torch import nn class CenteredLayer(nn.Module): def __init__(self): super().__init__() def forward(self, X): return X - X.mean() 带参数的层 class MyLinear(nn.Module): def __init__(self, in_units, units): super().__init__() self.weight = nn.Parameter(torch.randn(in_units, units)) self.bias = nn.Parameter(torch.randn(units,)) def forward(self, X): linear = torch.matmul(X, self.weight.data) + self.bias.data return F.relu(linear) 注意使用nn.Param
参数访问 import torch from torch import nn net = nn.Sequential(nn.Linear(4, 8), nn.ReLU(), nn.Linear(8, 1)) X = torch.rand(size=(2, 4)) print(net[2].state_dict()) OrderedDict([('weight', tensor([[-0.0427, -0.2939, -0.1894, 0.0220, -0.1709, -0.1522, -0.0334, -0.2263]])), ('bias', tensor([0.0887]))]) 使用state_dict()方法返回一个模型的参数设置,在这个例子中,我们