1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
| import torch import torch.nn as nn
class TemporalSpectralFusionTransformer(nn.Module): """ 时频融合Transformer 用于航空环境EEG认知状态分类 """ def __init__(self, n_channels=14, n_classes=6): super().__init__() self.temporal_encoder = nn.Sequential( nn.Conv1d(n_channels, 64, kernel_size=3, padding=1), nn.ReLU(), nn.MaxPool1d(2), nn.Conv1d(64, 128, kernel_size=3, padding=1), nn.ReLU(), nn.MaxPool1d(2) ) self.spectral_encoder = nn.Sequential( nn.Linear(n_channels * 5, 256), nn.ReLU(), nn.Linear(256, 128) ) self.transformer = nn.TransformerEncoder( nn.TransformerEncoderLayer(d_model=256, nhead=8), num_layers=6 ) self.classifier = nn.Linear(256, n_classes) def forward(self, eeg_signal): """ 前向传播 Args: eeg_signal: (batch, n_channels, seq_len) Returns: logits: (batch, n_classes) """ temporal_features = self.temporal_encoder(eeg_signal) temporal_features = temporal_features.view(temporal_features.size(0), -1, 256) spectral_features = self.compute_psd(eeg_signal) spectral_features = self.spectral_encoder(spectral_features) spectral_features = spectral_features.unsqueeze(1).expand(-1, temporal_features.size(1), -1) fused_features = temporal_features + spectral_features encoded = self.transformer(fused_features) logits = self.classifier(encoded[:, -1, :]) return logits def compute_psd(self, eeg_signal): """ 计算功率谱密度(简化版) """ batch_size, n_channels, seq_len = eeg_signal.shape psd_features = torch.randn(batch_size, n_channels * 5, device=eeg_signal.device) return psd_features
class CognitiveStateTaxonomy: """ 六状态认知状态分类 参考:Multimodal AI for Pilot Skill Assessment """ STATES = [ 'focused', 'distracted', 'fatigued', 'overloaded', 'underload', 'startled' ] @staticmethod def get_state_description(state): descriptions = { 'focused': '高度专注,最佳工作状态', 'distracted': '注意力分散,认知分心', 'fatigued': '疲劳状态,反应迟缓', 'overloaded': '认知过载,信息处理能力下降', 'underload': '低负荷,警觉性下降', 'startled': '突发惊吓,应激反应' } return descriptions.get(state, '未知状态')
|