#deep-learning #pytorch
#глубокое обучение #pytorch
Вопрос:
Я следую этой статье и пытаюсь реализовать эту функцию:
def replace_max_pooling(model):
'''
The function replaces max pooling layers with average pooling layers with
the following properties: kernel_size=2, stride=2, padding=0.
'''
for layer in model.layers:
if layer is max pooling:
replace
Но я получаю ошибку на итерации, которая гласит:
ModuleAttributeError: объект ‘VGG’ не имеет атрибута ‘layers’…
Как я могу сделать это правильно?
Комментарии:
1. Вы пробовали это с
torch.nn.AvgPool2d
?2. Я не пробовал, потому что я новичок в этом и не знаю, с чего начать… Как я могу выполнить итерацию по слоям и заменить их?
Ответ №1:
Модель VGG, предоставляемая Torchvision, содержит три компонента: features
подмодуль avgpool
(адаптивный средний пул) и classifier
. Вам нужно смотреть в начало сети, где расположены уровни свертки и пула : features
.
Вы можете перебирать слои nn.Module
с named_children()
помощью . Однако есть и другие способы сделать это. Вы можете использовать isinstance
, чтобы определить, относится ли слой к определенному типу.
В этой конкретной модели слои называются по индексу. Итак, чтобы найти соответствующие слои в nn.Module
и перезаписать их, мы можем преобразовать имена в int s .
for i, layer in m.features.named_children():
if isinstance(layer, torch.nn.MaxPool2d):
m.features[int(i)] = nn.AvgPool2d(kernel_size=2, stride=2, padding=0)
Предварительная настройка:
import torch
import torch.nn as nn
m = models.vgg16()