神经网络
卷积
- 在 pytorch 中用 conv2d 或Conv2d 来表示 卷积,其中,大写的 Conv2d 为 类式接口,小写的 conv2d 为 函数式接口
- 而 conv2d 更底层一些
- 可以理解为 大写的Conv2d 为 卷积层;而 小写的 conv2d 为 卷积操作
- 注:一般使用 大写的Conv2d ,直接在下方整体调用,因为在调用类式方法时,会自动调用相关的 call 函数,使用更便捷
池化
- 池化向 下采样 一般采样 maxpool 函数
- 而 上采样 一般采用 interpolate() 函数
Batch Norm
- 使搜索速度更快,且更稳定
- 对于正则化,一般使用 nn.BatchNorm1d(a) 或 nn.BatchNorm2d(a) 函数,a 为 通道数 即可
- 和卷积一样,在 test 时,需要增加 .eval() 函数切换
深度学习发展历程
LeNet-5
- 最早用于数字识别
AlexNet
- 精度较之前提升了 10%
VGG
- 首次提出,用更小的卷积核,提取到的特征也不少,而计算量却可以大幅度减少,首次使用 3x3 和 1x1 的卷积核
- 1x1的卷积核卷积可以用来以很小的运算量改变通道数
GoogLeNet
- 网络深度更深,同时首次尝试了在同一层有不同的卷积核卷积,同统一将其链接,以此获得不同层次的特征(不同卷积核,感受野不同)
- 注:卷积操作的步长一般都是 2 以配合池化层的大小
ResNet
- 跳过一些层,使得网络更深,而提高精度
- 下例是一个变化版本的 resnet ,用1x1卷积使输出通道等于输入通道
DenseNet
- ResNet的一种扩展
nn.module
- 可以使用 squential() 函数顺序排列,各个层
- 使用 parameters 参数。一步获取需要的参数
- 使用 .to 直接将运算转移到GPU
- 保存
- train 和 test 切换
- 为链接 二维卷积层和全连接层,可以自建一个 flatten() 函数帮助维度的过渡
- 对于自己写的方法类,需要调用 nn.Parameter() 函数将参数加载进去,但应注意,这里是 大写的 Parameter