我正在尝试找出图像在通过卷积神经网络的每一层时的尺寸。例如,如果应用了最大池化或卷积操作,我想知道图像在该层的形状,适用于所有层。我知道可以使用nOut=image+2p-f / s + 1
公式,但考虑到PyTorch模型的规模,这会过于繁琐和复杂。有什么简单的方法可以做到这一点吗?或许有可视化工具/脚本之类的东西?
回答:
你可以使用torchinfo
库:https://github.com/TylerYep/torchinfo
让我们来看他们的例子:
from torchinfo import summarymodel = ConvNet()batch_size = 16summary(model, input_size=(batch_size, 1, 28, 28))
这里(1, 28, 28)
是输入的大小,分别对应图像的(通道, 宽度, 高度)
。
该库将打印如下内容:
================================================================================================================Layer (type:depth-idx) Input Shape Output Shape Param # Mult-Adds================================================================================================================SingleInputNet -- -- -- --├─Conv2d: 1-1 [7, 1, 28, 28] [7, 10, 24, 24] 260 1,048,320├─Conv2d: 1-2 [7, 10, 12, 12] [7, 20, 8, 8] 5,020 2,248,960├─Dropout2d: 1-3 [7, 20, 8, 8] [7, 20, 8, 8] -- --├─Linear: 1-4 [7, 320] [7, 50] 16,050 112,350├─Linear: 1-5 [7, 50] [7, 10] 510 3,570================================================================================================================Total params: 21,840Trainable params: 21,840Non-trainable params: 0Total mult-adds (M): 3.41================================================================================================================Input size (MB): 0.02Forward/backward pass size (MB): 0.40Params size (MB): 0.09Estimated Total Size (MB): 0.51================================================================================================================
我认为输出中的7
是错误的,应该是16
。