ResNet
forkortelse for Residual Network
ResNet er et konvolutionelt neuralt netværk, der anvender residualforbindelser (springforbindelser) til at muliggøre træning af meget dybe netværk med hundredvis eller tusindvis af lag.
Kort fortalt
ResNet er et dybt neuralt netværk, der springer nogle lag over for at undgå forsvindende gradienter og dermed gør det muligt at træne ekstremt dybe modeller.
- Kategori
- arkitektur
- Niveau
- øvet
- Udtale
- /ˈrɛzˌnɛt/
Betydninger
2- 1
Den oprindelige ResNet-arkitektur introduceret af He et al. i 2015, som anvender residualblokke med springforbindelser for at løse problemet med forsvindende gradienter i meget dybe neurale netværk.
- ResNet-50 er en variant af ResNet med 50 lag, der ofte bruges som rygrad i billedklassifikationsopgaver. — He et al., 2015
- Ved at indføre springforbindelser kunne ResNet træne netværk med op til 152 lag uden at lide under forsvindende gradienter. — He et al., 2015
- 2
En hvilken som helst neural netværksarkitektur, der anvender residualblokke eller springforbindelser, ofte i forbindelse med dybe convolutional neural networks.
- Mange moderne arkitekturer som ResNeXt og Wide ResNet bygger videre på ResNet-princippet med residuale forbindelser.
Hvornår bruges det
ResNet bruges som rygrad i mange computer Vision-opgaver som billedklassifikation, objektdetektion og segmentering. Det er især kendt for at muliggøre træning af netværk med over 100 lag, hvilket før var svært på grund af forsvindende gradienter.
Kodeeksempel
import torch
import torch.nn as nn
class ResidualBlock(nn.Module):
def __init__(self, in_channels, out_channels, stride=1):
super().__init__()
self.conv1 = nn.Conv2d(in_channels, out_channels, kernel_size=3, stride=stride, padding=1)
self.bn1 = nn.BatchNorm2d(out_channels)
self.relu = nn.ReLU(inplace=True)
self.conv2 = nn.Conv2d(out_channels, out_channels, kernel_size=3, stride=1, padding=1)
self.bn2 = nn.BatchNorm2d(out_channels)
self.shortcut = nn.Sequential()
if stride != 1 or in_channels != out_channels:
self.shortcut = nn.Sequential(
nn.Conv2d(in_channels, out_channels, kernel_size=1, stride=stride),
nn.BatchNorm2d(out_channels)
)
def forward(self, x):
out = self.relu(self.bn1(self.conv1(x)))
out = self.bn2(self.conv2(out))
out += self.shortcut(x)
out = self.relu(out)
return outEn simpel residualblok i PyTorch. Springforbindelsen (shortcut) justeres med et 1x1 convolutionslag, hvis dimensionerne ændres.
Oprindelse
Navnet er en sammentrækning af 'Residual Network' (residualnetværk), der henviser til brugen af residualblokke med springforbindelser.