Мне действительно нужна твоя помощь с чем-то раздражающим, что я не могу объяснить. Я довольно новичок в PyTorch и хочу реализовать модуль, который требует использования ModuleList. Однако после создания пустого объекта ModuleList я не могу использовать его метод добавления. Почему?
self.modules = torch.nn.ModuleList([])
print(type(self.modules), type(torch.nn.ModuleList())) # -> <class 'method'> <class 'torch.nn.modules.container.ModuleList'>
for m in range(len(self.module_sizes)):
prev_channels = 0 if m == 0 else self.module_out_channels[-m]
vgg19_channels = self.vgg19_layer_channels[-(m+1)]
module_out_channels = self.module_out_channels[-(m+1)]
module_size = self.module_sizes[-(m+1)]
self.modules.append(
GeneratorModule(prev_channels=prev_channels, vgg19_channels=vgg19_channels, out_channels=module_out_channels, module_size=module_size, initial=(m==0))
)
В сообщении об ошибке написано:
File "main.py", line 90, in __init__
self.modules.append(
AttributeError: 'function' object has no attribute 'append'
Пока все хорошо. Я предполагаю, что как только я назначу ModuleList в качестве переменной класса для моего пользовательского подкласса nn.Module, он становится объектом 'function'. Поэтому я изменил код таким образом, что ModuleList присваивается self.modules после добавления l oop. Но затем он выдает еще одну ошибку в следующем фрагменте кода, где говорится:
for m, module in enumerate(self.modules):
pass
TypeError: 'method' object is not iterable
Я знаю, что это должно работать, поскольку я обнаружил, что другие люди делают это таким образом на inte rnet.
Я был бы очень рад, если бы какой-нибудь более опытный программист PyTorch смог мне помочь. Заранее спасибо!