July 2025
Intermediate to advanced
220 pages
3h
Chinese
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
在尝试了第 2 章中的全连接神经网络后,你可能会注意到一些问题。如果你试图添加更多层或大幅增加参数数量,你几乎肯定会耗尽 GPU 上的内存。此外,要花费一段时间才能训练出稍微像样的准确率,即便如此也没什么值得称道的,尤其是考虑到围绕 Deep Learning 的炒作。Go 到底是怎么回事?
的确,一个全连接或(前馈)网络可以发挥通用近似器的功能,但理论上并没有说你需要花多长时间来训练它成为你真正追求的函数的那个近似器。但我们可以做得更好,尤其是在处理图像时。在本章中,你将了解卷积神经网络(CNN),以及它们如何构成当今最准确的图像分类器的骨干(我们将对其中几种进行详细介绍)。我们将为 "鱼与猫 "应用建立一个新的基于卷积的架构,并证明它比上一章的训练更快、更准确。让我们开始吧!
这次,我将先分享最终的模型架构,然后再讨论所有新的部分。而且正如我在第 2 章中提到的,我们创建的训练方法与模型无关,所以你可以先去测试一下这个模型,然后再来听讲解!
classCNNNet(nn.Module):def__init__(self,num_classes=2):super(CNNNet,self).__init__()self.features=nn.Sequential(nn.Conv2d(3,64,kernel_size=11,stride=4,padding=2),nn.ReLU(),nn.MaxPool2d(kernel_size=3,stride=2),nn.Conv2d(64,192,kernel_size=5,padding=2),nn.ReLU(),nn.MaxPool2d(kernel_size=3,stride=2),nn.Conv2d(192,384,kernel_size=3,padding=1),nn.ReLU(),nn.Conv2d(384,256,kernel_size=3,padding=1),nn.ReLU(),nn.Conv2d(256,256,kernel_size=3,padding=1),nn.ReLU(),nn.MaxPool2d(kernel_size=3,stride=2),)self.avgpool=nn.AdaptiveAvgPool2d((6,6))self.classifier=nn.Sequential(nn.Dropout(),nn.Linear(256*6*6,4096),nn.ReLU(),nn.Dropout(),nn.Linear(4096,4096),nn.ReLU(),nn.Linear(4096,num_classes))defforward(self,x):x=self.features(x)x=self.avgpool(x)x=torch.flatten(x,1)x=self.classifier(x)returnx
首先要注意的是nn.Sequential() 的使用。这样我们就可以创建一个层链。当我们在forward() 中使用其中一个链时,输入会依次经过层数组的每个元素。您可以利用这一点将模型分解成更合理的排列。在这个 Network+ ...