Example #1
0
    def _specific_train_val(self, balanced_train, balanced_val, neural_net, optimizer, current_cm, fold=0):
        train_time_s = 0
        val_time_s = 0

        all_epoch_train_acc = []
        all_epoch_val_acc = []
        all_epoch_train_loss = []
        all_epoch_val_loss = []

        # self.__msd_train_dict = self.compute_label_msd_dict(balanced_train, fold+1)
        for epoch in range(1, self.learning_def.num_epochs + 1):

            train_start = time.time()
            train_loss, train_accuracy = self.train(balanced_train, neural_net, optimizer)
            train_time_diff = utils.time_diff(train_start)
            train_time_s += train_time_diff

            # after each epoch the new trained model
            torch.save(neural_net, self.model_path)

            # start validating the learning
            val_start = time.time()
            val_loss, val_accuracy = self.val(balanced_val, current_cm)
            val_time_diff = utils.time_diff(val_start)
            val_time_s += val_time_diff

            all_epoch_train_acc.append(train_accuracy)
            all_epoch_val_acc.append(val_accuracy)
            all_epoch_train_loss.append(train_loss)
            all_epoch_val_loss.append(val_loss)

            # Print epoch number, loss, accuracy, name and guess
            print_every = 10
            if epoch % print_every == 0:
                self.result_logger.info(
                    f"Epoch {epoch}: Train Loss: {train_loss :.5f}    Train Accuracy:"
                    f" {train_accuracy:.3f}    Val Loss: {val_loss :.5f}    Val Accuracy: {val_accuracy:.3f}")

        train_time = utils.time_s_to_str(train_time_s)
        val_time = utils.time_s_to_str(val_time_s)

        self.result_logger.info(f"\nTrain time (over last cross-validation pass): {train_time}")
        self.result_logger.info(f"Test time (over last cross-validation pass): {val_time}")

        num_last_epochs = 50
        # calculate averages over the last 50 epochs
        avg_train_loss = sum(all_epoch_train_loss[-num_last_epochs:]) / len(all_epoch_train_loss[-num_last_epochs:])
        avg_train_accuracy = sum(all_epoch_train_acc[-num_last_epochs:]) / len(all_epoch_train_acc[-num_last_epochs:])
        avg_val_loss = sum(all_epoch_val_loss[-num_last_epochs:]) / len(all_epoch_val_loss[-num_last_epochs:])
        avg_val_accuracy = sum(all_epoch_val_acc[-num_last_epochs:]) / len(all_epoch_val_acc[-num_last_epochs:])

        return avg_train_loss, avg_train_accuracy, avg_val_loss, avg_val_accuracy
Example #2
0
    def _specific_eval_only(self, balanced_val, confusion_matrix, model_path=None):
        val_time_s = 0

        # start validating the learning
        val_start = time.time()
        val_loss, val_accuracy = self.val(balanced_val, confusion_matrix, model_path)
        val_time_diff = utils.time_diff(val_start)
        val_time_s += val_time_diff

        val_time = utils.time_s_to_str(val_time_s)
        self.result_logger.info(f"Test Avg Loss: {val_loss:.5f}     Test Accuracy: {val_accuracy:.3f}")
        self.result_logger.info(f"\nTest time (over last cross-validation pass): {val_time}\n")

        return val_accuracy
Example #3
0
    def _specific_train_only(self, balanced_train, neural_net, optimizer):
        epoch_train_row_losses = []
        epoch_train_row_accuracies = []
        epoch_train_column_losses = []
        epoch_train_column_accuracies = []
        epoch_train_button_accuracies = []
        train_time_s = 0

        print(f"\nNetwork Architecture: {neural_net}\n")
        for epoch in range(1, self.learning_def.num_epochs + 1):

            train_start = time.time()
            row_loss, row_accuracy, column_loss, column_accuracy, button_accuracy = self.train(
                balanced_train, neural_net, optimizer)
            train_time_diff = utils.time_diff(train_start)
            train_time_s += train_time_diff

            print_every = 10
            if epoch % print_every == 0:
                print(
                    f"Epoch {epoch}\n: Train Row Loss: {(row_loss / epoch):.5f}    Train Row Accuracy:"
                    f" {row_accuracy:.3f}     Train Column Loss: {(column_loss / epoch):.5f}"
                    f"    Train Row Accuracy: {column_accuracy:.3f}     Train Button Accuracy: {button_accuracy:.3f}\n"
                )

            # Add current loss avg to list of losses
            epoch_train_row_losses.append(row_loss / epoch)
            epoch_train_row_accuracies.append(row_accuracy)
            epoch_train_column_losses.append(column_loss / epoch)
            epoch_train_column_accuracies.append(column_accuracy / epoch)
            epoch_train_button_accuracies.append(button_accuracy)

            self.__all_epoch_train_row_accuracies.append(
                epoch_train_row_accuracies)
            self.__all_epoch_train_row_losses.append(epoch_train_row_losses)
            self.__all_epoch_train_col_accuracies.append(
                epoch_train_column_accuracies)
            self.__all_epoch_train_col_losses.append(epoch_train_column_losses)
            self.__all_epoch_train_button_accuracies.append(
                epoch_train_button_accuracies)

            self.train_time = utils.time_s_to_str(train_time_s)
Example #4
0
    def _specific_train_only(self, balanced_train, neural_net, optimizer):
        train_time_s = 0

        for epoch in range(1, self.learning_def.num_epochs + 1):
            train_start = time.time()
            current_train_loss, current_train_accuracy = self.train(balanced_train, neural_net, optimizer)
            train_time_diff = utils.time_diff(train_start)
            train_time_s += train_time_diff

            # Print epoch number, loss, accuracy, name and guess
            print_every = 10
            if epoch % print_every == 0:
                self.result_logger.info(
                    f"Epoch {epoch}:    Train Loss: {(current_train_loss / epoch):.5f}    Train Accuracy:"
                    f" {current_train_accuracy:.3f}")

            # self.writer.add_scalar('Train Avg Loss', current_train_loss / epoch, epoch)

        train_time = utils.time_s_to_str(train_time_s)
        self.result_logger.info(f"\nTrain time (over last cross-validation pass): {train_time}")
Example #5
0
    def _specific_train_val(self, balanced_train, balanced_val, neural_net,
                            optimizer):
        epoch_train_row_losses = []
        epoch_train_row_accuracies = []
        epoch_train_column_losses = []
        epoch_train_column_accuracies = []
        epoch_train_button_accuracies = []

        epoch_val_row_losses = []
        epoch_val_row_accuracies = []
        epoch_val_column_losses = []
        epoch_val_column_accuracies = []
        epoch_val_button_accuracies = []

        train_time_s = 0
        val_time_s = 0
        for epoch in range(1, self.learning_def.num_epochs + 1):

            train_start = time.time()
            train_row_loss, train_row_accuracy, train_column_loss, \
            train_column_accuracy, train_button_accuracy = self.train(balanced_train, neural_net, optimizer)

            train_time_diff = utils.time_diff(train_start)
            train_time_s += train_time_diff

            # start validating the learning
            val_start = time.time()
            val_row_loss, val_row_accuracy, val_column_loss, val_column_accuracy, val_button_accuracy = \
                self.val(balanced_val)

            val_time_diff = utils.time_diff(val_start)
            val_time_s += val_time_diff

            # Print epoch number, loss, accuracy, name and guess
            print_every = 10
            if epoch % print_every == 0:
                print(
                    f"Epoch {epoch}: \n"
                    f"Train Row Loss: {(train_row_loss / epoch):.5f}    Train Row Accuracy:"
                    f" {train_row_accuracy:.3f}  Train Column Loss: {(train_column_loss / epoch):.5f}    Train Column "
                    f"Accuracy: {train_column_accuracy:.3f}     Train Button Accuracy: {train_button_accuracy:.3f}  \n"
                    f"Val Row Loss: {(val_row_loss / epoch):.5f}      Val Row Accuracy: {val_row_accuracy: .3f}     "
                    f"Val Column Loss: {(val_column_loss / epoch):.5f}    Val Column Accuracy: "
                    f"{val_column_accuracy:.3f}     Val Button Accuracy: {val_button_accuracy:.3f}     \n"
                )

                # print(f"Train Row Accuracies: {self._all_epoch_train_row_accuracies}\n")
                # print(f"Train Button Accuracies: {self._all_epoch_train_button_accuracies}\n")
                # print(f"Val Row Accuracies: {self._all_epoch_val_row_accuracies}\n")
                # print(f"Val Button Accuracies: {self._all_epoch_val_button_accuracies}\n\n")

            # Add current loss avg to list of losses
            epoch_train_row_losses.append(train_row_loss / epoch)
            epoch_val_row_losses.append(val_row_loss / epoch)
            epoch_train_column_losses.append(train_column_loss / epoch)
            epoch_val_column_losses.append(val_column_loss / epoch)

            epoch_train_row_accuracies.append(train_row_accuracy)
            epoch_val_row_accuracies.append(val_row_accuracy)
            epoch_train_column_accuracies.append(train_column_accuracy)
            epoch_val_column_accuracies.append(val_column_accuracy)
            epoch_train_button_accuracies.append(train_button_accuracy)
            epoch_val_button_accuracies.append(val_button_accuracy)

        self.__all_epoch_train_row_accuracies.append(
            epoch_train_row_accuracies)
        self.__all_epoch_train_row_losses.append(epoch_train_row_losses)
        self.__all_epoch_train_col_accuracies.append(
            epoch_train_column_accuracies)
        self.__all_epoch_train_col_losses.append(epoch_train_column_losses)
        self.__all_epoch_train_button_accuracies.append(
            epoch_train_button_accuracies)

        self.__all_epoch_val_row_accuracies.append(epoch_val_row_accuracies)
        self.__all_epoch_val_row_losses.append(epoch_val_row_losses)
        self.__all_epoch_val_col_accuracies.append(epoch_val_column_accuracies)
        self.__all_epoch_val_col_losses.append(epoch_val_column_losses)
        self.__all_epoch_val_button_accuracies.append(
            epoch_val_button_accuracies)

        self.train_time = utils.time_s_to_str(train_time_s)
        self.val_time = utils.time_s_to_str(val_time_s)