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
| import torch import torch.nn as nn
class BiLSTMEmotion(nn.Module): """双向LSTM情绪识别""" def __init__(self, input_dim, hidden=128, num_classes=3, num_layers=2): super().__init__() self.lstm = nn.LSTM(input_dim, hidden, num_layers=num_layers, batch_first=True, bidirectional=True) self.classifier = nn.Sequential( nn.Linear(hidden * 2, 64), nn.ReLU(), nn.Dropout(0.3), nn.Linear(64, num_classes) ) def forward(self, x): out, _ = self.lstm(x) return self.classifier(out[:, -1, :])
class TCNEmotion(nn.Module): """时序卷积网络情绪识别""" def __init__(self, input_dim, num_channels=[64, 128, 256], kernel_size=5, num_classes=3): super().__init__() layers = [] for i in range(len(num_channels)): dilation = 2 ** i in_ch = input_dim if i == 0 else num_channels[i-1] layers.append(nn.Conv1d(in_ch, num_channels[i], kernel_size, padding=(kernel_size-1)*dilation//2, dilation=dilation)) layers.append(nn.BatchNorm1d(num_channels[i])) layers.append(nn.ReLU()) layers.append(nn.Dropout(0.2)) self.network = nn.Sequential(*layers) self.classifier = nn.Linear(num_channels[-1], num_classes) def forward(self, x): x = x.transpose(1, 2) out = self.network(x) return self.classifier(out.mean(dim=-1))
class TransformerEmotion(nn.Module): """Transformer情绪识别""" def __init__(self, input_dim, d_model=128, nhead=8, num_layers=4, num_classes=3): super().__init__() self.input_proj = nn.Linear(input_dim, d_model) self.pos_encoding = nn.Parameter(torch.randn(1, 1000, d_model) * 0.02) encoder_layer = nn.TransformerEncoderLayer( d_model, nhead, dim_feedforward=512, dropout=0.1, batch_first=True ) self.transformer = nn.TransformerEncoder(encoder_layer, num_layers) self.classifier = nn.Sequential( nn.LayerNorm(d_model), nn.Linear(d_model, num_classes) ) def forward(self, x): x = self.input_proj(x) + self.pos_encoding[:, :x.size(1), :] x = self.transformer(x) return self.classifier(x.mean(dim=1))
|