You cannot call nn.ModuleList
s 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