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
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
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)
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}")
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)