Я определяю остаточный блок в pytorch для Re sNet, в котором вы можете указать, сколько сверточных слоев вы хотите иметь, а не обязательно два. Это делается с помощью параметра с именем n c (количество Convs). Первый уровень получает ni как количество входных nf количество фильтров. Но со второго слоя я положил их на 1 oop. Вот мой код:
class ResBlock(nn.Module):
def __init__(self, ni, nf,nc=2):
super().__init__()
self.conv1 = nn.Conv2d(ni,nf, kernel_size=3, stride=2, padding=0)
self.conv2 = nn.Conv2d(nf,nf, kernel_size=3, stride=1, padding=0)
self.conv1x1 = nn.Conv2d(ni, nf, kernel_size=1, stride=1, padding=0)
self.nc = nc
def forward(self, x):
y = self.conv1(x)
for i in range(self.nc-1):
y = self.conv2(y)
print(torch.mean(y))
return self.conv1x1(x) + y
Но независимо от того, какое значение я даю n c, он всегда возвращает 2 конв с размером ядра 3. Я не уверен, что для l oop действительно может эта работа в pytorch, но она работала, когда я использовал функциональный API в Keras. Может ли кто-нибудь помочь мне понять, что происходит?