我在阅读这篇研究论文(https://www.cs.cmu.edu/~rsalakhu/papers/oneshot1.pdf)并尝试跟随GitHub上的代码。我不明白nn.Conv2d()的参数是如何确定的。对于第一个Conv2d:64@96*96是否意味着64个通道和96 x 96的卷积核大小?如果是这样,那么为什么函数中的卷积核大小是10?我已经谷歌了这些参数及其含义,从我所读到的内容来看,我理解这是(输入通道数, 输出通道数, 卷积核大小)
这是GitHub的帖子:https://github.com/fangpin/siamese-pytorch/blob/master/train.py
供参考,研究论文的第4页有模型示意图。
self.conv = nn.Sequential( nn.Conv2d(1, 64, 10), # 64@96*96 nn.ReLU(inplace=True), nn.MaxPool2d(2), # 64@48*48 nn.Conv2d(64, 128, 7), nn.ReLU(), # 128@42*42 nn.MaxPool2d(2), # 128@21*21 nn.Conv2d(128, 128, 4), nn.ReLU(), # 128@18*18 nn.MaxPool2d(2), # 128@9*9 nn.Conv2d(128, 256, 4), nn.ReLU(), # 256@6*6 ) self.liner = nn.Sequential(nn.Linear(9216, 4096), nn.Sigmoid()) self.out = nn.Linear(4096, 1)
回答:
如果你查看模型示意图,它展示了两件事,
- 卷积核的参数,
- 特征图的参数(
nn.Conv2D
操作的输出)
例如,第一个conv2d
层是64@10×10,意味着64个输出通道和10×10的卷积核。
而特征图是64@96x96
,这是通过将64@10x10
的卷积操作应用于105x105x1
大小的输入得到的。这样你会得到64个输出通道,以及宽度和高度为105-10+1=96
的尺寸。