Pytorch神经网络设计技巧-如何得到各层的input shape
当设计神经网络时,常常被每层的input shape所烦恼,计算也很恼人。
在使用pytorch设计的时候,有两种方法能够协助你进行输入维度的设置。
方法一:懒加载(nn.Lazy**)
Pytorch 提供了各个常用层的Lazy版本,类似于懒加载的思想
这些层有懒初始化(lazy initialization)的机制,在使用时不用显示指定input shape
它们会在第一次前向传播的时候获取输入数据的shape来初始化自己的input shape
省去人工计算input shape的操作。
方法二:利用前向传播调试
懒初始化Pytorch比较新的特性。
如果坚持使用不带lazy的层,可以在设计的时候给一个输入数据
让数据在网络中进行一次前向传播,打印每个层输出的shape:
# 生成1幅单通道的224*224大小的随机图像
X = torch.randn(1, 1, 224, 224)
for layer in net:
X=layer(X)
print(layer.__class__.__name__,'output shape:\t',X.shape)
这样就可以根据输出的shape来设计和添加合适的层了。
参考:
- LazyConv2d — PyTorch 1.12 documentation
- 7.1. 深度卷积神经网络(AlexNet) — 动手学深度学习 2.0.0-beta1 documentation