Sobes.tech
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

ეს ბლოკი ეხმარება ქსელს უფრო ეფექტურად სწავლაში, რადგან გრადიენტი პირდაპირ გადის დარჩენილი კავშირების მეშვეობით.