└── FCNmodel.py /FCNmodel.py: -------------------------------------------------------------------------------- 1 | 2 | class FCN_model(nn.Module): 3 | def __init__(self,NumClassesOut,N_time,N_Features,N_LSTM_Out=128,N_LSTM_layers = 1 4 | ,Conv1_NF = 128,Conv2_NF = 256,Conv3_NF = 128,self.lstmDropP = 0.8,self.FC_DropP = 0.3): 5 | super(FCN_model,self).__init__() 6 | 7 | self.N_time = N_time 8 | self.N_Features = N_Features 9 | self.NumClassesOut = NumClassesOut 10 | self.N_LSTM_Out = N_LSTM_Out 11 | self.N_LSTM_layers = N_LSTM_layers 12 | self.Conv1_NF = Conv1_NF 13 | self.Conv2_NF = Conv2_NF 14 | self.Conv3_NF = Conv3_NF 15 | self.lstm = nn.LSTM(self.N_Features,self.N_LSTM_Out,self.N_LSTM_layers) 16 | self.C1 = nn.Conv1d(self.N_Features,self.Conv1_NF,8) 17 | self.C2 = nn.Conv1d(self.Conv1_NF,self.Conv2_NF,5) 18 | self.C3 = nn.Conv1d(self.Conv2_NF,self.Conv3_NF,3) 19 | self.BN1 = nn.BatchNorm1d(self.Conv1_NF) 20 | self.BN2 = nn.BatchNorm1d(self.Conv2_NF) 21 | self.BN3 = nn.BatchNorm1d(self.Conv3_NF) 22 | self.relu = nn.ReLU() 23 | self.lstmDrop = nn.Dropout(lstmDropP) 24 | self.ConvDrop = nn.Dropout(FC_DropP) 25 | self.FC = nn.Linear(self.Conv3_NF + self.N_LSTM_Out,self.NumClassesOut) 26 | 27 | def init_hidden(self): 28 | 29 | h0 = torch.zeros(self.N_LSTM_layers, self.N_time, self.N_LSTM_Out).to(device) 30 | c0 = torch.zeros(self.N_LSTM_layers, self.N_time, self.N_LSTM_Out).to(device) 31 | return h0,c0 32 | 33 | def forward(self,x): 34 | 35 | # input x should be in size [B,T,F] , where B = Batch size 36 | # T = Time sampels 37 | # F = features 38 | 39 | h0,c0 = self.init_hidden() 40 | x1, (ht,ct) = self.lstm(x, (h0, c0)) 41 | x1 = x1[:,-1,:] 42 | 43 | x2 = x.transpose(2,1) 44 | x2 = self.ConvDrop(self.relu(self.BN1(self.C1(x2)))) 45 | x2 = self.ConvDrop(self.relu(self.BN2(self.C2(x2)))) 46 | x2 = self.ConvDrop(self.relu(self.BN3(self.C3(x2)))) 47 | x2 = torch.mean(x2,2) 48 | 49 | x_all = torch.cat((x1,x2),dim=1) 50 | x_out = self.FC(x_all) 51 | return x_out 52 | --------------------------------------------------------------------------------