TypeError: forward() takes 1 positional argument but 2 were given

You cannot call nn.ModuleLists directly and should iterate them instead.
I guess you would like to use nn.Sequential instead as shown in this code:

class MancalaModel(nn.Module):

    def __init__(self, n_inputs=16, n_outputs=16):
        super().__init__()

        n_neurons = 256

        def create_block(n_in, n_out):
            block = []
            block.append(nn.Linear(n_in, n_out))
            block.append(nn.ReLU())
            block = nn.Sequential(*block)
            return block

        self.blocks = []
        self.blocks.append(create_block(n_inputs, n_neurons))
        for _ in range(6):
            self.blocks.append(create_block(n_neurons, n_neurons))
        self.blocks = nn.Sequential(*self.blocks)

        self.actor_block = []
        self.critic_block = []
        for _ in range(2):
            self.actor_block.append(create_block(n_neurons, n_neurons))
            self.critic_block.append(create_block(n_neurons, n_neurons))

        self.actor_block.append(create_block(n_neurons, n_outputs))
        self.critic_block.append(create_block(n_neurons, 1))
        self.actor_block = nn.Sequential(*self.actor_block)
        self.critic_block = nn.Sequential(*self.critic_block)


    def forward(self, x):
        x = self.blocks(x)
        actor = F.softmax(self.actor_block(x))
        critics = self.critic_block(x)
        return actor, critics
2 Likes