Middle
ResNet идеясы туралы айтыңыз және ResidualBlock кодының мысалын жазыңыз.
sobes.tech AI
AI-дан жауап
ResNet (Residual Network) идеясы — бұл қалдық байланыстарды (skip connections) қолдану, олар бір немесе бірнеше қабатты айналып өтуге мүмкіндік береді, бұл жоғалып бара жатқан градиент мәселесін шешуге және өте терең нейрон желілерін оқытуды жеңілдетуге көмектеседі.
ResNet негізгі элементі — ResidualBlock, ол кіріс сигналын бірнеше қабаттың шығысына қосады, келесі функцияны жүзеге асырады:
output = F(x) + x
мұнда F(x) — кіріске түрлендіру (мысалы, бірнеше конволюциялық қабаттар).
PyTorch қолдана отырып, ResidualBlock-тың Python кодының мысалы:
import torch
import torch.nn as nn
class ResidualBlock(nn.Module):
def __init__(self, channels):
super(ResidualBlock, self).__init__()
self.conv1 = nn.Conv2d(channels, channels, kernel_size=3, padding=1)
self.bn1 = nn.BatchNorm2d(channels)
self.relu = nn.ReLU(inplace=True)
self.conv2 = nn.Conv2d(channels, channels, kernel_size=3, padding=1)
self.bn2 = nn.BatchNorm2d(channels)
def forward(self, x):
residual = x
out = self.conv1(x)
out = self.bn1(out)
out = self.relu(out)
out = self.conv2(out)
out = self.bn2(out)
out += residual
out = self.relu(out)
return out
Мұндай блок желінің оқытуын тиімдірек етеді, градиенттің тікелей қалдық байланыстар арқылы өтуіне мүмкіндік береді.