网络中的网络(NiN)

http://zh-v2.d2l.ai/chapter_convolutional-modern/nin.html

为什么nin_block在实现的时候不把Max Pooling层放到block里面,而是单独写;但是,对比VGG的实现,在vgg_block里面就是加入了max pooling层?还是说都可以,就是习惯问题?

我在nin_block里面删除了一个1x1 conv layer之后的test accuracy = 0.884, 反而变高了?是因为少了参数,所以过拟合的可能性降低了吗?

前3个nin_block块卷积层后确实跟了max pooling层,但最后一个nin_block后跟着是一个AdaptiveAvgPool2d层。如果把max pooling放进nin_block中,最后一个nin_block就要一部分一分部拆开写。其实block只是最相同重复元素的抽象,方便网络定义。拆开一个个写效果是一样的。

请问为什么在最后一个NiN Block前添加Dropout层?

放一个后面测试predict的代码,根据图片大小改改(224,224)的地方就行了
device = torch.device(“cuda” if torch.cuda.is_available() else “cpu”)
def predict_ch3(net, test_iter,n=100): #@save
for X, y in test_iter:
break
trues = d2l.get_fashion_mnist_labels(y)
preds = d2l.get_fashion_mnist_labels(net(X.to(device)).argmax(axis=1))
titles = [true + ‘\n’ + pred for true, pred in zip(trues, preds)]
d2l.show_images(X[0:n].reshape((n, 224, 224)), 1, n, titles=titles[0:n])

帅威正解,因为最后一个池化层不是MaxPool,所以没有把MaxPool放到模块构造函数里面