from __future__ import annotations import torch from torch import nn class MicroZeroNet(nn.Module): def __init__(self) -> None: super().__init__() self.trunk = nn.Sequential( nn.Linear(9, 64), nn.LayerNorm(64), nn.SiLU(), nn.Linear(64, 64), nn.SiLU(), ) self.policy = nn.Linear(64, 9) self.value = nn.Sequential( nn.Linear(64, 32), nn.SiLU(), nn.Linear(32, 1), nn.Tanh(), ) def forward(self, board: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor]: hidden = self.trunk(board) return self.policy(hidden), self.value(hidden).squeeze(-1) def parameter_count(model: nn.Module) -> int: return sum(parameter.numel() for parameter in model.parameters())