feat: do not print info about results if not in interactrive mode

This commit is contained in:
Krzysztof Rudnicki 2023-05-16 19:46:33 +02:00
parent f85f8ee482
commit ebe16a206d

View File

@ -105,14 +105,14 @@ def single_train_iteration(
loss.backward() loss.backward()
training_parameters['optimizer'].step() training_parameters['optimizer'].step()
# Print loss value for every learning step # Print loss value for every learning step
if (batch_idx + 1) % 100 == 0: """if (batch_idx + 1) % 100 == 0:
print( print(
f''' f'''
Epoch [{epoch+1}/{training_parameters['hyperparameters']["num_epochs"]}], Epoch [{epoch+1}/{training_parameters['hyperparameters']["num_epochs"]}],
Step [{batch_idx+1}/{len(training_parameters['loaders']['train_loader'])}], Step [{batch_idx+1}/{len(training_parameters['loaders']['train_loader'])}],
Loss: {loss.item():.4f} Loss: {loss.item():.4f}
''' '''
) )"""
# Append loss value for every learning step # Append loss value for every learning step
loss_values.append(loss.item()) loss_values.append(loss.item())
return data, training_parameters['optimizer'] return data, training_parameters['optimizer']
@ -144,7 +144,7 @@ def set_training_parameters(hyperparameters, loaders, model, criterion, optimize
} }
def training_loop(training_parameters): def training_loop(training_parameters, print_info=True):
""" """
Train network for all epochs Train network for all epochs
""" """
@ -156,13 +156,13 @@ def training_loop(training_parameters):
data, training_parameters, targets, batch_idx, epoch data, training_parameters, targets, batch_idx, epoch
) )
calculate_accuracy_epoch( calculate_accuracy_epoch(
training_parameters, epoch) training_parameters, epoch, print_info)
calculate_validation_set_accuracy( calculate_validation_set_accuracy(
training_parameters, epoch) training_parameters, epoch, print_info)
return epoch, training_parameters['loaders']['train_loader'] return epoch, training_parameters['loaders']['train_loader']
def calculate_accuracy_epoch(training_parameters, epoch): def calculate_accuracy_epoch(training_parameters, epoch, print_info=True):
""" Calculate accuracy on train set after each epoch """ """ Calculate accuracy on train set after each epoch """
correct = 0 correct = 0
total = 0 total = 0
@ -173,12 +173,13 @@ def calculate_accuracy_epoch(training_parameters, epoch):
total += targets.size(0) total += targets.size(0)
correct += (predicted == targets).sum().item() correct += (predicted == targets).sum().item()
train_accuracy = 100 * correct / total train_accuracy = 100 * correct / total
print( if print_info:
f"Accuracy on Train Set after Epoch {epoch+1}: {train_accuracy:.2f}%") print(
f"Accuracy on Train Set after Epoch {epoch+1}: {train_accuracy:.2f}%")
train_acc_values.append(train_accuracy) train_acc_values.append(train_accuracy)
def calculate_validation_set_accuracy(training_parameters, epoch): def calculate_validation_set_accuracy(training_parameters, epoch, print_info=True):
""" Calculate accuracy on validation set after each epoch """ """ Calculate accuracy on validation set after each epoch """
correct = 0 correct = 0
total = 0 total = 0
@ -190,10 +191,11 @@ def calculate_validation_set_accuracy(training_parameters, epoch):
correct += (predicted == targets).sum().item() correct += (predicted == targets).sum().item()
validation_accuracy = 100 * correct / total validation_accuracy = 100 * correct / total
print( if print_info:
f"Accuracy on Validation Set after Epoch {epoch+1}: {validation_accuracy:.2f}%" print(
) f"Accuracy on Validation Set after Epoch {epoch+1}: {validation_accuracy:.2f}%"
print("---") )
print("---")
val_acc_values.append(validation_accuracy) val_acc_values.append(validation_accuracy)
@ -211,7 +213,7 @@ def main_part(show_plot=True):
TRAIN_LOADER, TEST_LOADER) TRAIN_LOADER, TEST_LOADER)
TRAINING_PARAMETERS = set_training_parameters( TRAINING_PARAMETERS = set_training_parameters(
HYPERPARAMETERS, LOADERS, MODEL, CRITERION, OPTIMIZER) HYPERPARAMETERS, LOADERS, MODEL, CRITERION, OPTIMIZER)
training_loop(TRAINING_PARAMETERS) training_loop(TRAINING_PARAMETERS, show_plot)
file = open("results.txt", "a") file = open("results.txt", "a")
file.write( file.write(
"-------------------------------------------------------------------------------------") "-------------------------------------------------------------------------------------")
@ -260,29 +262,41 @@ if __name__ == "__main__":
OPTIMIZER_TYPE = 'Adam' OPTIMIZER_TYPE = 'Adam'
learning_rate_values = [0.1, 0.01, 0.001] learning_rate_values = [0.1, 0.01, 0.001]
i = 0
MAX_TESTS = 17
for lr in learning_rate_values: for lr in learning_rate_values:
LEARNING_RATE = lr LEARNING_RATE = lr
main_part(False) main_part(False)
i += 1
print(f"Test {i}/{MAX_TESTS} ran")
LEARNING_RATE = 0.001 LEARNING_RATE = 0.001
batch_size_values = [64, 128, 256] batch_size_values = [64, 128, 256]
for bs in batch_size_values: for bs in batch_size_values:
BATCH_SIZE = bs BATCH_SIZE = bs
main_part(False) main_part(False)
i += 1
print(f"Test {i}/{MAX_TESTS} ran")
BATCH_SIZE = 64 BATCH_SIZE = 64
hidden_layers_values = [1, 2, 3] hidden_layers_values = [1, 2, 3]
for hl in hidden_layers_values: for hl in hidden_layers_values:
NUM_HIDDEN_LAYERS = hl NUM_HIDDEN_LAYERS = hl
main_part(False) main_part(False)
i += 1
print(f"Test {i}/{MAX_TESTS} ran")
NUM_HIDDEN_LAYERS = 2 NUM_HIDDEN_LAYERS = 2
width_values = [64, 128, 256, 512, 1024] width_values = [64, 128, 256, 512, 1024]
for width in WIDTH: for width in WIDTH:
WIDTH = width WIDTH = width
main_part(False) main_part(False)
i += 1
print(f"Test {i}/{MAX_TESTS} ran")
WIDTH = 128 WIDTH = 128
for optimizer in ['SGD', 'SGD_Momentum', 'Adam']: for optimizer in ['SGD', 'SGD_Momentum', 'Adam']:
OPTIMIZER_TYPE = optimizer OPTIMIZER_TYPE = optimizer
main_part(False) main_part(False)
i += 1
print(f"Test {i}/{MAX_TESTS} ran")