Views
No views yet
Conv1D -> ... -> LSTM -> Dense -> Dense (Softmax)(batch_size, 10, 46) — 46 normalized network features1import tensorflow as tf
2import numpy as np
3from huggingface_hub import hf_hub_download
4
5# Download the model
6MODEL_PATH = hf_hub_download("Codelord01/multiclass_model", "multiclass_model.keras")
7model = tf.keras.models.load_model(MODEL_PATH)
8model.summary()
9
10# Define class names in the order used during training
11CLASS_NAMES = [
12 'BenignTraffic', 'DDoS-ACK_Fragmentation', 'DDoS-HTTP_Flood', 'DDoS-ICMP_Flood',
13 'DDoS-ICMP_Fragmentation', 'DDoS-PSHACK_Flood', 'DDoS-RSTFINFlood', 'DDoS-SYN_Flood',
14 'DDoS-SlowLoris', 'DDoS-SynonymousIP_Flood', 'DDoS-TCP_Flood', 'DDoS-UDP_Flood',
15 'DDoS-UDP_Fragmentation', 'DNS_Spoofing', 'DoS-HTTP_Flood', 'DoS-SYN_Flood',
16 'DoS-TCP_Flood', 'DoS-UDP_Flood', 'MITM-ArpSpoofing', 'Mirai-greeth_flood',
17 'Mirai-greip_flood', 'Mirai-udpplain', 'OtherAttack', 'Recon-HostDiscovery',
18 'VulnerabilityScan'
19]
20
21# Sample input: 1 sample, 10 timesteps, 46 features
22sample_data = np.random.rand(1, 10, 46).astype(np.float32)
23
24# Make a prediction
25prediction_probs = model.predict(sample_data)
26predicted_index = np.argmax(prediction_probs)
27predicted_class = CLASS_NAMES[predicted_index]
28confidence = prediction_probs[predicted_index]
29
30print(f"Predicted Attack Type: {predicted_class}")
31print(f"Confidence: {confidence:.4f}")
32
33## Limitations
34- Validated only on CICIoT2023-like traffic
35- Input must be normalized
36- CLASS_NAMES must match training order
37
38## Training Information
39- Optimizer: Adam
40- Loss: Categorical Cross-Entropy
41- 25-class balanced dataset
42
43
44@mastersthesis{ababio2025multilayered,
45 title={A Multi-Layered Hybrid Deep Learning Framework for Cyber-Physical Intrusion Detection in Climate-Monitoring IoT Systems},
46 author={Awuni David Ababio},
47 year={2025},
48 school={Kwame Nkrumah University of Science and Technology}
49}
50
51