Почему мы передаем nn.Module в качестве аргумента в определение класса для нейронных сетей? - PullRequest
2 голосов
/ 01 июня 2019

Я хочу понять, почему мы передаем torch.nn.Module в качестве аргумента, когда определяем класс для нейронной сети, такой как GAN

import torch
import torch.nn as nn

class Generator(nn.Module):
    def __init__(self, input_size, hidden_size, output_size, f):
        super(Generator, self).__init__()
        self.map1 = nn.Linear(input_size, hidden_size)
        self.map2 = nn.Linear(hidden_size, hidden_size)
        self.map3 = nn.Linear(hidden_size, output_size)
        self.f = f

Ответы [ 2 ]

2 голосов
/ 02 июня 2019

Эта строка

class Generator(nn.Module):

просто означает, что класс Generator будет наследовать класс nn.Module, это не аргумент.

Однако, dunder init method:

def __init__(self, input_size, hidden_size, output_size, f):

Имеет self, поэтому вы можете рассматривать это как аргумент.

Ну, это экземпляр класса Python self.Были битвы переделок, если он останется или должен идти, но Гвидо объяснил в своем блоге why it has to stay.

1 голос
/ 01 июня 2019

Мы по сути определяем класс 'Generator' с помощью nn.Module (с его функциональными возможностями).В программировании мы называем это наследованием (с super(Generator, self).__init__()).

Вы можете прочитать больше здесь: https://www.w3schools.com/python/python_inheritance.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...