| import torch | |
| import torch.nn as nn | |
| import torch.nn.functional as F | |
| class ImprovedNet(nn.Module): | |
| def __init__(self, input_features, output_features, dropout=0.30): | |
| super().__init__() | |
| self.layer1 = nn.Linear(input_features, 512) | |
| self.layer2 = nn.Linear(512, 256) | |
| self.layer3 = nn.Linear(256, 128) | |
| self.output_layer = nn.Linear(128, output_features) | |
| self.dropout = nn.Dropout(p=dropout) | |
| def forward(self, x): | |
| x = F.relu(self.layer1(x)); x = self.dropout(x) | |
| x = F.relu(self.layer2(x)); x = self.dropout(x) | |
| x = F.relu(self.layer3(x)) | |
| return self.output_layer(x) | |
| def load_model(weights_path, config_path="config.json", device="cpu"): | |
| import json | |
| with open(config_path) as f: | |
| cfg = json.load(f) | |
| model = ImprovedNet(cfg["input_size"], cfg["output_size"], dropout=cfg.get("dropout", 0.30)) | |
| model.load_state_dict(torch.load(weights_path, map_location=device)) | |
| model.to(device) | |
| model.eval() | |
| return model | |