Source code for pyhazards.models.backbones

import torch
import torch.nn as nn


[docs] class MLPBackbone(nn.Module): """Simple MLP for tabular features.""" def __init__(self, input_dim: int, hidden_dim: int = 256, depth: int = 2): super().__init__() layers = [] dim = input_dim for _ in range(depth): layers.extend([nn.Linear(dim, hidden_dim), nn.ReLU()]) dim = hidden_dim self.net = nn.Sequential(*layers)
[docs] def forward(self, x): return self.net(x)
[docs] class CNNPatchEncoder(nn.Module): """Lightweight CNN encoder for raster patches.""" def __init__(self, in_channels: int = 3, hidden_dim: int = 64): super().__init__() self.features = nn.Sequential( nn.Conv2d(in_channels, hidden_dim, kernel_size=3, padding=1), nn.ReLU(), nn.Conv2d(hidden_dim, hidden_dim, kernel_size=3, padding=1), nn.ReLU(), nn.AdaptiveAvgPool2d(1), )
[docs] def forward(self, x): x = self.features(x) return torch.flatten(x, 1)
[docs] class TemporalEncoder(nn.Module): """GRU-based encoder for time-series signals.""" def __init__(self, input_dim: int, hidden_dim: int = 128, num_layers: int = 1): super().__init__() self.rnn = nn.GRU(input_dim, hidden_dim, num_layers=num_layers, batch_first=True)
[docs] def forward(self, x): # x: (batch, seq, features) out, _ = self.rnn(x) return out[:, -1, :]
__all__ = ["MLPBackbone", "CNNPatchEncoder", "TemporalEncoder"]