7.1 AlexNet
2012年,AlexNet横空出世。它首次证明了学习到的特征可以超越手工设计的特征。它一举打破了计算机视觉研究的现状。 AlexNet使用了8层卷积神经网络,并以很大的优势赢得了2012年ImageNet图像识别挑战赛。
它的主要改进可概括为:
- 更大更深的LeNet,由八层组成:五个卷积层、两个全连接隐藏层和一个全连接输出层。
- 使用ReLU作为激活函数
- 使用暂退法(Dropout)
- MaxPooling
- 使用了数据增强,如翻转、裁切和变色。这使得模型更健壮,更大的样本量有效地减少了过拟合
import torchfrom torch import nnfrom d2l import torch as d2l
net = nn.Sequential( # 因为学习演示就不用ImageNet了,所以输入通道为1 nn.Conv2d(1, 96, kernel_size=11, stride=4, padding=1), nn.ReLU(), nn.MaxPool2d(kernel_size=3, stride=2), nn.Conv2d(96, 256, kernel_size=5, padding=2), nn.ReLU(), nn.MaxPool2d(kernel_size=3, stride=2), nn.Conv2d(256, 384, kernel_size=3, padding=1), nn.ReLU(), nn.Conv2d(384, 384, kernel_size=3, padding=1), nn.ReLU(), nn.Conv2d(384, 256, kernel_size=3, padding=1), nn.ReLU(), nn.MaxPool2d(kernel_size=3, stride=2), nn.Flatten(), # 这里,全连接层的输出数量是LeNet中的好几倍。使用dropout层来减轻过拟合 nn.Linear(6400, 4096), nn.ReLU(), nn.Dropout(p=0.5), nn.Linear(4096, 4096), nn.ReLU(), nn.Dropout(p=0.5), nn.Linear(4096, 10))
X = torch.randn(1, 1, 224, 224)for layer in net: X = layer(X) print(layer.__class__.__name__, 'output shape:\t', X.shape)Conv2d output shape: torch.Size([1, 96, 54, 54])ReLU output shape: torch.Size([1, 96, 54, 54])MaxPool2d output shape: torch.Size([1, 96, 26, 26])Conv2d output shape: torch.Size([1, 256, 26, 26])ReLU output shape: torch.Size([1, 256, 26, 26])MaxPool2d output shape: torch.Size([1, 256, 12, 12])Conv2d output shape: torch.Size([1, 384, 12, 12])ReLU output shape: torch.Size([1, 384, 12, 12])Conv2d output shape: torch.Size([1, 384, 12, 12])ReLU output shape: torch.Size([1, 384, 12, 12])Conv2d output shape: torch.Size([1, 256, 12, 12])ReLU output shape: torch.Size([1, 256, 12, 12])MaxPool2d output shape: torch.Size([1, 256, 5, 5])Flatten output shape: torch.Size([1, 6400])Linear output shape: torch.Size([1, 4096])ReLU output shape: torch.Size([1, 4096])Dropout output shape: torch.Size([1, 4096])Linear output shape: torch.Size([1, 4096])ReLU output shape: torch.Size([1, 4096])Dropout output shape: torch.Size([1, 4096])Linear output shape: torch.Size([1, 10])为了可以有效的把AlexNet应用到Fashion-MNIST上,我们需要把Fashion-MNIST图像扩展到 。
这里的训练使用更小的学习速率,是因为网络更深更广、图像分辨率更高,训练卷积神经网络就更昂贵。
batch_size = 128train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size, resize=224)
lr, num_epochs = 0.01, 10d2l.train_ch6(net, train_iter, test_iter, num_epochs, lr, d2l.try_gpu())loss 0.329, train acc 0.880, test acc 0.8791642.2 examples/sec on cuda:0小结
-
AlexNet的架构与LeNet相似,但使用了更多的卷积层和更多的参数来拟合大规模的ImageNet数据集。
-
今天,AlexNet已经被更有效的架构所超越,但它是从浅层网络到深层网络的关键一步。
-
尽管AlexNet的代码只比LeNet多出几行,但学术界花了很多年才接受深度学习这一概念,并应用其出色的实验结果。这也是由于缺乏有效的计算工具。
-
Dropout、ReLU和预处理是提升计算机视觉任务性能的其他关键步骤。
本文由 kaikaikk 原创,发布于
;
转载请保留原文链接:
https://kaikaikk.com/posts/d2l-7-1-alexnet/