Junior — Senior
40
Что такое global average pooling и зачем он заменяет fully-connected слой?
Компании, где спрашивали
1221 Systems
ПлатформаОФД
Rubbles
Ответ от нейросети
sobes.tech AI
Global Average Pooling (GAP) — это операция, которая вычисляет среднее значение по каждому каналу входного тензора, обычно после сверточных слоев в нейронной сети. Вместо того, чтобы использовать полностью связанный (fully-connected) слой, который преобразует многомерный тензор в вектор фиксированной длины, GAP сводит каждый канал к одному числу — среднему значению по пространственным измерениям (высота и ширина).
Зачем заменяют fully-connected слой на GAP:
- Уменьшение количества параметров: Fully-connected слои имеют много параметров, что увеличивает риск переобучения и требует больше вычислительных ресурсов.
- Инвариантность к пространственным сдвигам: GAP агрегирует информацию по всему пространству, что делает модель менее чувствительной к расположению признаков.
- Упрощение архитектуры: GAP позволяет использовать переменный размер входного изображения, так как не зависит от фиксированного размера входа, в отличие от fully-connected слоев.
Пример использования GAP в PyTorch:
import torch
import torch.nn as nn
class SimpleCNN(nn.Module):
def __init__(self, num_classes=10):
super().__init__()
self.features = nn.Sequential(
nn.Conv2d(3, 16, kernel_size=3, padding=1),
nn.ReLU(),
nn.Conv2d(16, 32, kernel_size=3, padding=1),
nn.ReLU()
)
self.global_avg_pool = nn.AdaptiveAvgPool2d(1) # GAP
self.classifier = nn.Linear(32, num_classes) # заменяет fully-connected слой
def forward(self, x):
x = self.features(x)
x = self.global_avg_pool(x) # размер [batch, 32, 1, 1]
x = x.view(x.size(0), -1) # размер [batch, 32]
x = self.classifier(x)
return x
Таким образом, GAP упрощает модель и снижает количество параметров, сохраняя при этом важную информацию для классификации.