ResNet学习总结
2019-12-08——2019-12-09
阅读论文并复现了ResNet,其中复现代码均是基于Pytorch框架。
ResNet简述
该结构是由彼时还在MSRA的何凯明提出的,其精髓在于提出了Residual Block结构建立了梯度传播的”highway“用来减缓反向传播中的梯度消失问题,进而使得网络层数加深。其精髓的Residual block由可分为两种类型——BasicBlock和Bottleneck,分别用于ResNet18/34和ResNet50/101/152。结构分别如下:
BasicBlock:
Bottleneck:
ResNet的general architecture如下:
以下复现为模型ResNet18,数据集为CIFAR10。
网络结构代码如下:
import torch
import torch.nn as nn # Various Layers
import torch.optim as optim # Optimizers
class BasicBlock(nn.Module):
def __init__(self, inplanes, outplanes, stride=1, downsample=None):
super(BasicBlock, self).__init__()
self.conv1 = nn.Conv2d(inplanes, outplanes, kernel_size=3, stride=stride, padding=1)
self.bn1 = nn.BatchNorm2d(outplanes)
self.relu = nn.ReLU(inplace=True)
self.conv2 = nn.Conv2d(outplanes, outplanes, kernel_size=3, stride=1, padding=1