Middle
გაამართეთ ResNet-ის იდეა და დაწერეთ ResidualBlock კოდი.
sobes.tech AI
პასუხი AI-სგან
ResNet (მიღწევადი ქსელი) იდეა ეფუძნება დარჩენილი კავშირების (skip connections) გამოყენებას, რომლებიც საშუალებას აძლევს ერთ ან რამდენიმე ფენას გადახტომა, რათა თავიდან აიცილოს განადგურების გრადიენტი და გაადვილოს ძალიან ღრმა ნეირონული ქსელების სწავლა.
ResNet-ის მთავარი ელემენტი არის ResidualBlock, რომელიც ამატებს შესვლის სიგნალს რამდენიმე ფენის გამოსავალს და ახორციელებს ფუნქციას:
output = F(x) + x
სადაც F(x) — შესვლის ტრანსფორმაციაა (მაგალითად, რამდენიმე კონვოლუციური ფენა).
Python-ში PyTorch-ის გამოყენებით ResidualBlock-ის მაგალითი:
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
ეს ბლოკი ეხმარება ქსელს უფრო ეფექტურად სწავლაში, რადგან გრადიენტი პირდაპირ გადის დარჩენილი კავშირების მეშვეობით.