Esempio n. 1
0
            train_test_split(data_T[no_mass_index, :], label_T[no_mass_index, :], data_type[no_mass_index], test_size=0.2)
    
    train_input = torch.from_numpy(train_input)
    train_label = torch.from_numpy(train_label)
    train_data = torch.utils.data.TensorDataset(train_input, train_label)
    train_loader = torch.utils.data.DataLoader(train_data, batch_size=BATCH_SIZE, shuffle=True)
        
    validation_input = torch.from_numpy(validation_input)
    validation_label = torch.from_numpy(validation_label)
    validation_data = torch.utils.data.TensorDataset(validation_input, validation_label)
    validation_loader = torch.utils.data.DataLoader(validation_data, batch_size=BATCH_SIZE, shuffle=True)

'''-------------------------------------------------------------------------'''
'''------------------------------ create model -----------------------------'''
'''-------------------------------------------------------------------------'''
cnn = CNN.CNNModel().to(device)
optimizer = torch.optim.Adam(cnn.parameters(), lr=LR)
loss_func = nn.CrossEntropyLoss()

loss_record = []
correlationCoefficientList = []
correlationCoefficientList_eva = []

'''-------------------------------------------------------------------------'''
'''---------------------------- train model --------------------------------'''
'''-------------------------------------------------------------------------'''
if TRAIN:

    cnn.load_state_dict(torch.load(pt_filename))
    best_valid_loss = float('inf')
       
Esempio n. 2
0
    def __init__(self):
            #CNN parameters
            feature_dim = 246
            label_dim = 64
            num_filters = 128
            kernel_size = 5
            drop_rate = 0.5

            #RNN parameters
            # feature_dim = 246
            # hidden_size = 128
            # num_layers = 1
            # dropout_rate = 0.5
            # label_dim = 64
            # biDirectional = True
            min_loss = float("inf")
            self.isBest = False

            train_dataset = Dataset.Dataset('train_factory.mat')
            dataset_size = len(train_dataset)
            validation_split = 0.2
            random_seed = 42
            shuffle_dataset = True
            indices = list(range(dataset_size))
            split = int(np.floor(validation_split * dataset_size))
            if shuffle_dataset:
                np.random.seed(random_seed)
                np.random.shuffle(indices)
            train_indices, val_indices = indices[split:], indices[:split]
            train_sampler = SubsetRandomSampler(train_indices)
            valid_sampler = SubsetRandomSampler(val_indices)

            self.train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=1, sampler=train_sampler)
            self.validation_loader = torch.utils.data.DataLoader(train_dataset, batch_size=1, sampler=valid_sampler)


            test_dataset = Dataset.Dataset('test_factory.mat')
            self.test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=1, shuffle=True)
            self.total_step = len(self.train_loader)
            self.model = CNN.CNNModel(feature_dim=feature_dim,label_dim = label_dim, num_filters = num_filters, kernel_size=kernel_size, drop_rate=drop_rate)
            #model = RNN.RNNModel(feature_dim=feature_dim, hidden_size=128, num_layers, drop_rate, label_dim, biDirectional=True)
            self.optimizer = optim.Adam(self.model.parameters(), lr=0.001)
            self.num_epochs = 50
            for epoch in range(self.num_epochs):
                self.train_dataset(epoch)
                val_loss = self.val_dataset()

                self.isBest = val_loss < min_loss
                min_loss = min(val_loss, min_loss)

            if self.isBest:
                torch.save(self.model, "model_CNN.pt")

            # Test the model
            if self.isBest:
                self.model = torch.load("model_CNN.pt")
            self.model.eval()
            loss = 0
            with torch.no_grad():
                for i, (test_feature, test_label) in enumerate(self.test_loader):
                    outputs = self.model(test_feature)
                    loss = loss + self.model.loss(outputs, test_label)
            print("Average Testing Loss:", loss.item()/len(self.test_loader))