NetGuard-AI / src /model.py
Alireza Aminzadeh
Upload folder using huggingface_hub
199e55c verified
import torch
import torch.nn as nn
class AnomalyDetector(nn.Module):
def __init__(self, input_dim=41, hidden_dim=64):
"""
Autoencoder for Network Anomaly Detection.
Input dimension 41 corresponds to NSL-KDD dataset features.
"""
super(AnomalyDetector, self).__init__()
self.encoder = nn.Sequential(
nn.Linear(input_dim, hidden_dim),
nn.ReLU(),
nn.Linear(hidden_dim, hidden_dim // 2),
nn.ReLU(),
nn.Linear(hidden_dim // 2, hidden_dim // 4)
)
self.decoder = nn.Sequential(
nn.Linear(hidden_dim // 4, hidden_dim // 2),
nn.ReLU(),
nn.Linear(hidden_dim // 2, hidden_dim),
nn.ReLU(),
nn.Linear(hidden_dim, input_dim)
)
def forward(self, x):
encoded = self.encoder(x)
decoded = self.decoder(encoded)
return decoded
def detect_anomaly(model, data, threshold=0.05):
"""
Detects anomalies based on reconstruction error.
"""
model.eval()
with torch.no_grad():
reconstructed = model(data)
mse = torch.mean((data - reconstructed) ** 2, dim=1)
anomalies = mse > threshold
return anomalies, mse
if __name__ == "__main__":
model = AnomalyDetector()
dummy_traffic = torch.randn(10, 41)
anomalies, scores = detect_anomaly(model, dummy_traffic)
print("Anomalies:", anomalies)
print("Scores:", scores)