diff --git a/analysis/average_normalized/IC_-3.14_0.0_0.0_0.0/constant.png b/analysis/average_normalized/IC_-3.14_0.0_0.0_0.0/constant.png deleted file mode 100644 index 05e9aea..0000000 Binary files a/analysis/average_normalized/IC_-3.14_0.0_0.0_0.0/constant.png and /dev/null differ diff --git a/analysis/average_normalized/IC_-3.14_0.0_0.0_0.0/exponential.png b/analysis/average_normalized/IC_-3.14_0.0_0.0_0.0/exponential.png deleted file mode 100644 index 9a70a9d..0000000 Binary files a/analysis/average_normalized/IC_-3.14_0.0_0.0_0.0/exponential.png and /dev/null differ diff --git a/analysis/average_normalized/IC_-3.14_0.0_0.0_0.0/linear.png b/analysis/average_normalized/IC_-3.14_0.0_0.0_0.0/linear.png deleted file mode 100644 index ef71bfa..0000000 Binary files a/analysis/average_normalized/IC_-3.14_0.0_0.0_0.0/linear.png and /dev/null differ diff --git a/analysis/average_normalized/IC_-3.14_0.0_0.0_0.0/quadratic.png b/analysis/average_normalized/IC_-3.14_0.0_0.0_0.0/quadratic.png deleted file mode 100644 index 24e89bb..0000000 Binary files a/analysis/average_normalized/IC_-3.14_0.0_0.0_0.0/quadratic.png and /dev/null differ diff --git a/analysis/controller_across_epochs.py b/analysis/controller_across_epochs.py index 917e2ca..4f1f028 100644 --- a/analysis/controller_across_epochs.py +++ b/analysis/controller_across_epochs.py @@ -85,16 +85,16 @@ loss_functions = ["constant", "linear", "quadratic", "exponential", "inverse", " epoch_start = 0 # Start of the epoch range -epoch_end = 500 # End of the epoch range -epoch_step = 5 # Interval between epochs +epoch_end = 1000 # End of the epoch range +epoch_step = 10 # Interval between epochs if __name__ == "__main__": for condition_name, initial_condition in initial_conditions.items(): - full_path = f"/home/judson/Neural-Networks-in-GNC/inverted_pendulum/analysis/max_normalized/{condition_name}" + full_path = f"/home/judson/Neural-Networks-in-GNC/inverted_pendulum/analysis/average_normalized/{condition_name}" os.makedirs(full_path, exist_ok=True) # Create directory if it does not exist for loss_function in loss_functions: - controller_dir = f"/home/judson/Neural-Networks-in-GNC/inverted_pendulum/training/normalized/max_normalized/{loss_function}/controllers" + controller_dir = f"/home/judson/Neural-Networks-in-GNC/inverted_pendulum/training/normalized/average_normalized/{loss_function}/controllers" controller_files = sorted([f for f in os.listdir(controller_dir) if f.startswith("controller_") and f.endswith(".pth")]) # Extract epoch numbers and filter based on the defined range and interval epoch_numbers = [int(f.split('_')[1].split('.')[0]) for f in controller_files] diff --git a/analysis/old/average_normalized/extreme_perturbation/constant.png b/analysis/old/average_normalized/extreme_perturbation/constant.png new file mode 100644 index 0000000..bf9e661 Binary files /dev/null and b/analysis/old/average_normalized/extreme_perturbation/constant.png differ diff --git a/analysis/old/average_normalized/extreme_perturbation/exponential.png b/analysis/old/average_normalized/extreme_perturbation/exponential.png new file mode 100644 index 0000000..563dec5 Binary files /dev/null and b/analysis/old/average_normalized/extreme_perturbation/exponential.png differ diff --git a/analysis/old/average_normalized/extreme_perturbation/inverse.png b/analysis/old/average_normalized/extreme_perturbation/inverse.png new file mode 100644 index 0000000..31886b6 Binary files /dev/null and b/analysis/old/average_normalized/extreme_perturbation/inverse.png differ diff --git a/analysis/old/average_normalized/extreme_perturbation/inverse_squared.png b/analysis/old/average_normalized/extreme_perturbation/inverse_squared.png new file mode 100644 index 0000000..3837351 Binary files /dev/null and b/analysis/old/average_normalized/extreme_perturbation/inverse_squared.png differ diff --git a/analysis/old/average_normalized/extreme_perturbation/linear.png b/analysis/old/average_normalized/extreme_perturbation/linear.png new file mode 100644 index 0000000..1fe068b Binary files /dev/null and b/analysis/old/average_normalized/extreme_perturbation/linear.png differ diff --git a/analysis/old/average_normalized/extreme_perturbation/quadratic.png b/analysis/old/average_normalized/extreme_perturbation/quadratic.png new file mode 100644 index 0000000..d53a7c6 Binary files /dev/null and b/analysis/old/average_normalized/extreme_perturbation/quadratic.png differ diff --git a/analysis/old/average_normalized/large_perturbation/constant.png b/analysis/old/average_normalized/large_perturbation/constant.png new file mode 100644 index 0000000..8c78ffc Binary files /dev/null and b/analysis/old/average_normalized/large_perturbation/constant.png differ diff --git a/analysis/old/average_normalized/large_perturbation/exponential.png b/analysis/old/average_normalized/large_perturbation/exponential.png new file mode 100644 index 0000000..0454967 Binary files /dev/null and b/analysis/old/average_normalized/large_perturbation/exponential.png differ diff --git a/analysis/old/average_normalized/large_perturbation/inverse.png b/analysis/old/average_normalized/large_perturbation/inverse.png new file mode 100644 index 0000000..f7f8d41 Binary files /dev/null and b/analysis/old/average_normalized/large_perturbation/inverse.png differ diff --git a/analysis/old/average_normalized/large_perturbation/inverse_squared.png b/analysis/old/average_normalized/large_perturbation/inverse_squared.png new file mode 100644 index 0000000..c75c392 Binary files /dev/null and b/analysis/old/average_normalized/large_perturbation/inverse_squared.png differ diff --git a/analysis/old/average_normalized/large_perturbation/linear.png b/analysis/old/average_normalized/large_perturbation/linear.png new file mode 100644 index 0000000..89a2f7f Binary files /dev/null and b/analysis/old/average_normalized/large_perturbation/linear.png differ diff --git a/analysis/old/average_normalized/large_perturbation/quadratic.png b/analysis/old/average_normalized/large_perturbation/quadratic.png new file mode 100644 index 0000000..9982195 Binary files /dev/null and b/analysis/old/average_normalized/large_perturbation/quadratic.png differ diff --git a/analysis/old/average_normalized/overshoot_angle_test/constant.png b/analysis/old/average_normalized/overshoot_angle_test/constant.png new file mode 100644 index 0000000..2389ff5 Binary files /dev/null and b/analysis/old/average_normalized/overshoot_angle_test/constant.png differ diff --git a/analysis/old/average_normalized/overshoot_angle_test/exponential.png b/analysis/old/average_normalized/overshoot_angle_test/exponential.png new file mode 100644 index 0000000..fb22be0 Binary files /dev/null and b/analysis/old/average_normalized/overshoot_angle_test/exponential.png differ diff --git a/analysis/old/average_normalized/overshoot_angle_test/inverse.png b/analysis/old/average_normalized/overshoot_angle_test/inverse.png new file mode 100644 index 0000000..a0e6009 Binary files /dev/null and b/analysis/old/average_normalized/overshoot_angle_test/inverse.png differ diff --git a/analysis/old/average_normalized/overshoot_angle_test/inverse_squared.png b/analysis/old/average_normalized/overshoot_angle_test/inverse_squared.png new file mode 100644 index 0000000..2bf3577 Binary files /dev/null and b/analysis/old/average_normalized/overshoot_angle_test/inverse_squared.png differ diff --git a/analysis/old/average_normalized/overshoot_angle_test/linear.png b/analysis/old/average_normalized/overshoot_angle_test/linear.png new file mode 100644 index 0000000..196866b Binary files /dev/null and b/analysis/old/average_normalized/overshoot_angle_test/linear.png differ diff --git a/analysis/old/average_normalized/overshoot_angle_test/quadratic.png b/analysis/old/average_normalized/overshoot_angle_test/quadratic.png new file mode 100644 index 0000000..5415ca1 Binary files /dev/null and b/analysis/old/average_normalized/overshoot_angle_test/quadratic.png differ diff --git a/analysis/old/average_normalized/overshoot_vertical_test/constant.png b/analysis/old/average_normalized/overshoot_vertical_test/constant.png new file mode 100644 index 0000000..a1ec646 Binary files /dev/null and b/analysis/old/average_normalized/overshoot_vertical_test/constant.png differ diff --git a/analysis/old/average_normalized/overshoot_vertical_test/exponential.png b/analysis/old/average_normalized/overshoot_vertical_test/exponential.png new file mode 100644 index 0000000..29bf1fe Binary files /dev/null and b/analysis/old/average_normalized/overshoot_vertical_test/exponential.png differ diff --git a/analysis/old/average_normalized/overshoot_vertical_test/inverse.png b/analysis/old/average_normalized/overshoot_vertical_test/inverse.png new file mode 100644 index 0000000..4ff47bb Binary files /dev/null and b/analysis/old/average_normalized/overshoot_vertical_test/inverse.png differ diff --git a/analysis/old/average_normalized/overshoot_vertical_test/inverse_squared.png b/analysis/old/average_normalized/overshoot_vertical_test/inverse_squared.png new file mode 100644 index 0000000..08bc92f Binary files /dev/null and b/analysis/old/average_normalized/overshoot_vertical_test/inverse_squared.png differ diff --git a/analysis/old/average_normalized/overshoot_vertical_test/linear.png b/analysis/old/average_normalized/overshoot_vertical_test/linear.png new file mode 100644 index 0000000..00fe0c7 Binary files /dev/null and b/analysis/old/average_normalized/overshoot_vertical_test/linear.png differ diff --git a/analysis/old/average_normalized/overshoot_vertical_test/quadratic.png b/analysis/old/average_normalized/overshoot_vertical_test/quadratic.png new file mode 100644 index 0000000..2e4adc3 Binary files /dev/null and b/analysis/old/average_normalized/overshoot_vertical_test/quadratic.png differ diff --git a/analysis/old/average_normalized/small_perturbation/constant.png b/analysis/old/average_normalized/small_perturbation/constant.png new file mode 100644 index 0000000..2cb66c8 Binary files /dev/null and b/analysis/old/average_normalized/small_perturbation/constant.png differ diff --git a/analysis/old/average_normalized/small_perturbation/exponential.png b/analysis/old/average_normalized/small_perturbation/exponential.png new file mode 100644 index 0000000..34d3805 Binary files /dev/null and b/analysis/old/average_normalized/small_perturbation/exponential.png differ diff --git a/analysis/old/average_normalized/small_perturbation/inverse.png b/analysis/old/average_normalized/small_perturbation/inverse.png new file mode 100644 index 0000000..91e5d7a Binary files /dev/null and b/analysis/old/average_normalized/small_perturbation/inverse.png differ diff --git a/analysis/old/average_normalized/small_perturbation/inverse_squared.png b/analysis/old/average_normalized/small_perturbation/inverse_squared.png new file mode 100644 index 0000000..ab1c561 Binary files /dev/null and b/analysis/old/average_normalized/small_perturbation/inverse_squared.png differ diff --git a/analysis/old/average_normalized/small_perturbation/linear.png b/analysis/old/average_normalized/small_perturbation/linear.png new file mode 100644 index 0000000..6f75c7e Binary files /dev/null and b/analysis/old/average_normalized/small_perturbation/linear.png differ diff --git a/analysis/old/average_normalized/small_perturbation/quadratic.png b/analysis/old/average_normalized/small_perturbation/quadratic.png new file mode 100644 index 0000000..5e65508 Binary files /dev/null and b/analysis/old/average_normalized/small_perturbation/quadratic.png differ diff --git a/analysis/max_normalized/extreme_perturbation/constant.png b/analysis/old/max_normalized/extreme_perturbation/constant.png similarity index 100% rename from analysis/max_normalized/extreme_perturbation/constant.png rename to analysis/old/max_normalized/extreme_perturbation/constant.png diff --git a/analysis/max_normalized/extreme_perturbation/exponential.png b/analysis/old/max_normalized/extreme_perturbation/exponential.png similarity index 100% rename from analysis/max_normalized/extreme_perturbation/exponential.png rename to analysis/old/max_normalized/extreme_perturbation/exponential.png diff --git a/analysis/max_normalized/extreme_perturbation/inverse.png b/analysis/old/max_normalized/extreme_perturbation/inverse.png similarity index 100% rename from analysis/max_normalized/extreme_perturbation/inverse.png rename to analysis/old/max_normalized/extreme_perturbation/inverse.png diff --git a/analysis/max_normalized/extreme_perturbation/inverse_squared.png b/analysis/old/max_normalized/extreme_perturbation/inverse_squared.png similarity index 100% rename from analysis/max_normalized/extreme_perturbation/inverse_squared.png rename to analysis/old/max_normalized/extreme_perturbation/inverse_squared.png diff --git a/analysis/max_normalized/extreme_perturbation/linear.png b/analysis/old/max_normalized/extreme_perturbation/linear.png similarity index 100% rename from analysis/max_normalized/extreme_perturbation/linear.png rename to analysis/old/max_normalized/extreme_perturbation/linear.png diff --git a/analysis/max_normalized/extreme_perturbation/quadratic.png b/analysis/old/max_normalized/extreme_perturbation/quadratic.png similarity index 100% rename from analysis/max_normalized/extreme_perturbation/quadratic.png rename to analysis/old/max_normalized/extreme_perturbation/quadratic.png diff --git a/analysis/max_normalized/large_perturbation/constant.png b/analysis/old/max_normalized/large_perturbation/constant.png similarity index 100% rename from analysis/max_normalized/large_perturbation/constant.png rename to analysis/old/max_normalized/large_perturbation/constant.png diff --git a/analysis/max_normalized/large_perturbation/exponential.png b/analysis/old/max_normalized/large_perturbation/exponential.png similarity index 100% rename from analysis/max_normalized/large_perturbation/exponential.png rename to analysis/old/max_normalized/large_perturbation/exponential.png diff --git a/analysis/max_normalized/large_perturbation/inverse.png b/analysis/old/max_normalized/large_perturbation/inverse.png similarity index 100% rename from analysis/max_normalized/large_perturbation/inverse.png rename to analysis/old/max_normalized/large_perturbation/inverse.png diff --git a/analysis/max_normalized/large_perturbation/inverse_squared.png b/analysis/old/max_normalized/large_perturbation/inverse_squared.png similarity index 100% rename from analysis/max_normalized/large_perturbation/inverse_squared.png rename to analysis/old/max_normalized/large_perturbation/inverse_squared.png diff --git a/analysis/max_normalized/large_perturbation/linear.png b/analysis/old/max_normalized/large_perturbation/linear.png similarity index 100% rename from analysis/max_normalized/large_perturbation/linear.png rename to analysis/old/max_normalized/large_perturbation/linear.png diff --git a/analysis/max_normalized/large_perturbation/quadratic.png b/analysis/old/max_normalized/large_perturbation/quadratic.png similarity index 100% rename from analysis/max_normalized/large_perturbation/quadratic.png rename to analysis/old/max_normalized/large_perturbation/quadratic.png diff --git a/analysis/max_normalized/overshoot_angle_test/constant.png b/analysis/old/max_normalized/overshoot_angle_test/constant.png similarity index 100% rename from analysis/max_normalized/overshoot_angle_test/constant.png rename to analysis/old/max_normalized/overshoot_angle_test/constant.png diff --git a/analysis/max_normalized/overshoot_angle_test/exponential.png b/analysis/old/max_normalized/overshoot_angle_test/exponential.png similarity index 100% rename from analysis/max_normalized/overshoot_angle_test/exponential.png rename to analysis/old/max_normalized/overshoot_angle_test/exponential.png diff --git a/analysis/max_normalized/overshoot_angle_test/inverse.png b/analysis/old/max_normalized/overshoot_angle_test/inverse.png similarity index 100% rename from analysis/max_normalized/overshoot_angle_test/inverse.png rename to analysis/old/max_normalized/overshoot_angle_test/inverse.png diff --git a/analysis/max_normalized/overshoot_angle_test/inverse_squared.png b/analysis/old/max_normalized/overshoot_angle_test/inverse_squared.png similarity index 100% rename from analysis/max_normalized/overshoot_angle_test/inverse_squared.png rename to analysis/old/max_normalized/overshoot_angle_test/inverse_squared.png diff --git a/analysis/max_normalized/overshoot_angle_test/linear.png b/analysis/old/max_normalized/overshoot_angle_test/linear.png similarity index 100% rename from analysis/max_normalized/overshoot_angle_test/linear.png rename to analysis/old/max_normalized/overshoot_angle_test/linear.png diff --git a/analysis/max_normalized/overshoot_angle_test/quadratic.png b/analysis/old/max_normalized/overshoot_angle_test/quadratic.png similarity index 100% rename from analysis/max_normalized/overshoot_angle_test/quadratic.png rename to analysis/old/max_normalized/overshoot_angle_test/quadratic.png diff --git a/analysis/max_normalized/overshoot_vertical_test/constant.png b/analysis/old/max_normalized/overshoot_vertical_test/constant.png similarity index 100% rename from analysis/max_normalized/overshoot_vertical_test/constant.png rename to analysis/old/max_normalized/overshoot_vertical_test/constant.png diff --git a/analysis/max_normalized/overshoot_vertical_test/exponential.png b/analysis/old/max_normalized/overshoot_vertical_test/exponential.png similarity index 100% rename from analysis/max_normalized/overshoot_vertical_test/exponential.png rename to analysis/old/max_normalized/overshoot_vertical_test/exponential.png diff --git a/analysis/max_normalized/overshoot_vertical_test/inverse.png b/analysis/old/max_normalized/overshoot_vertical_test/inverse.png similarity index 100% rename from analysis/max_normalized/overshoot_vertical_test/inverse.png rename to analysis/old/max_normalized/overshoot_vertical_test/inverse.png diff --git a/analysis/max_normalized/overshoot_vertical_test/inverse_squared.png b/analysis/old/max_normalized/overshoot_vertical_test/inverse_squared.png similarity index 100% rename from analysis/max_normalized/overshoot_vertical_test/inverse_squared.png rename to analysis/old/max_normalized/overshoot_vertical_test/inverse_squared.png diff --git a/analysis/max_normalized/overshoot_vertical_test/linear.png b/analysis/old/max_normalized/overshoot_vertical_test/linear.png similarity index 100% rename from analysis/max_normalized/overshoot_vertical_test/linear.png rename to analysis/old/max_normalized/overshoot_vertical_test/linear.png diff --git a/analysis/max_normalized/overshoot_vertical_test/quadratic.png b/analysis/old/max_normalized/overshoot_vertical_test/quadratic.png similarity index 100% rename from analysis/max_normalized/overshoot_vertical_test/quadratic.png rename to analysis/old/max_normalized/overshoot_vertical_test/quadratic.png diff --git a/analysis/max_normalized/small_perturbation/constant.png b/analysis/old/max_normalized/small_perturbation/constant.png similarity index 100% rename from analysis/max_normalized/small_perturbation/constant.png rename to analysis/old/max_normalized/small_perturbation/constant.png diff --git a/analysis/max_normalized/small_perturbation/exponential.png b/analysis/old/max_normalized/small_perturbation/exponential.png similarity index 100% rename from analysis/max_normalized/small_perturbation/exponential.png rename to analysis/old/max_normalized/small_perturbation/exponential.png diff --git a/analysis/max_normalized/small_perturbation/inverse.png b/analysis/old/max_normalized/small_perturbation/inverse.png similarity index 100% rename from analysis/max_normalized/small_perturbation/inverse.png rename to analysis/old/max_normalized/small_perturbation/inverse.png diff --git a/analysis/max_normalized/small_perturbation/inverse_squared.png b/analysis/old/max_normalized/small_perturbation/inverse_squared.png similarity index 100% rename from analysis/max_normalized/small_perturbation/inverse_squared.png rename to analysis/old/max_normalized/small_perturbation/inverse_squared.png diff --git a/analysis/max_normalized/small_perturbation/linear.png b/analysis/old/max_normalized/small_perturbation/linear.png similarity index 100% rename from analysis/max_normalized/small_perturbation/linear.png rename to analysis/old/max_normalized/small_perturbation/linear.png diff --git a/analysis/max_normalized/small_perturbation/quadratic.png b/analysis/old/max_normalized/small_perturbation/quadratic.png similarity index 100% rename from analysis/max_normalized/small_perturbation/quadratic.png rename to analysis/old/max_normalized/small_perturbation/quadratic.png diff --git a/validator.py b/analysis/validator.py similarity index 100% rename from validator.py rename to analysis/validator.py diff --git a/training/normalized/PendulumController.py b/training/PendulumController.py similarity index 100% rename from training/normalized/PendulumController.py rename to training/PendulumController.py diff --git a/training/normalized/PendulumDynamics.py b/training/PendulumDynamics.py similarity index 100% rename from training/normalized/PendulumDynamics.py rename to training/PendulumDynamics.py diff --git a/training/__pycache__/PendulumController.cpython-310.pyc b/training/__pycache__/PendulumController.cpython-310.pyc new file mode 100644 index 0000000..7553e7c Binary files /dev/null and b/training/__pycache__/PendulumController.cpython-310.pyc differ diff --git a/training/__pycache__/PendulumDynamics.cpython-310.pyc b/training/__pycache__/PendulumDynamics.cpython-310.pyc new file mode 100644 index 0000000..4f7f0db Binary files /dev/null and b/training/__pycache__/PendulumDynamics.cpython-310.pyc differ diff --git a/training/__pycache__/initial_conditions.cpython-310.pyc b/training/__pycache__/initial_conditions.cpython-310.pyc new file mode 100644 index 0000000..8b1b0d4 Binary files /dev/null and b/training/__pycache__/initial_conditions.cpython-310.pyc differ diff --git a/training/average_normalized_trainer.py b/training/average_normalized_trainer.py new file mode 100644 index 0000000..b3ae564 --- /dev/null +++ b/training/average_normalized_trainer.py @@ -0,0 +1,159 @@ +import torch +import torch.optim as optim +from torchdiffeq import odeint +import numpy as np +import os +import shutil +import csv +import inspect + +from PendulumController import PendulumController +from PendulumDynamics import PendulumDynamics + +# Device setup +device = torch.device("cpu") + +# Initial conditions (theta0, omega0, alpha0, desired_theta) +from initial_conditions import initial_conditions +state_0 = torch.tensor(initial_conditions, dtype=torch.float32, device=device) + +# Device setup +device = torch.device("cpu") + +# Constants +m = 10.0 +g = 9.81 +R = 1.0 + +# Time grid +t_start, t_end, t_points = 0, 10, 1000 +t_span = torch.linspace(t_start, t_end, t_points, device=device) + +# Specify directory for storing results +output_dir = "average_normalized" +os.makedirs(output_dir, exist_ok=True) + +# Use a previously generated random seed +random_seed = 4529 + +# Set the seeds for reproducibility +torch.manual_seed(random_seed) +np.random.seed(random_seed) + +# Print the chosen random seed +print(f"Random seed for torch and numpy: {random_seed}") + +# Initialize controller and dynamics +controller = PendulumController().to(device) +pendulum_dynamics = PendulumDynamics(controller, m, R, g).to(device) + +# Optimizer setup +learning_rate = 1e-1 +weight_decay = 1e-4 +optimizer = optim.Adam(controller.parameters(), lr=learning_rate, weight_decay=weight_decay) + +# Training parameters +num_epochs = 1001 + +# Define loss functions +def make_loss_fn(weight_fn): + def loss_fn(state_traj, t_span): + theta = state_traj[:, :, 0] # Size: [batch_size, t_points] + desired_theta = state_traj[:, :, 3] # Size: [batch_size, t_points] + weights = weight_fn(t_span) # Initially Size: [t_points] + + # Reshape or expand weights to match theta dimensions + weights = weights.view(-1, 1) # Now Size: [batch_size, t_points] + + # Calculate the weighted loss + return torch.mean(weights * (theta - desired_theta) ** 2) + + return loss_fn + +# Define and store weight functions with descriptions, normalized by average weight +weight_functions = { + 'constant': { + 'function': lambda t: torch.ones_like(t) / torch.ones_like(t).mean(), + 'description': 'Constant weight: All weights are 1, normalized by the average (remains 1)' + }, + 'linear': { + 'function': lambda t: ((t+1) / (t+1).max()) / ((t+1) / (t+1).max()).mean(), + 'description': 'Linear weight: Weights increase linearly from 0 to 1, normalized by the average weight' + }, + 'quadratic': { + 'function': lambda t: ((t+1)**2 / ((t+1)**2).max()) / ((t+1)**2 / ((t+1)**2).max()).mean(), + 'description': 'Quadratic weight: Weights increase quadratically from 0 to 1, normalized by the average weight' + }, + 'cubic': { + 'function': lambda t: ((t+1)**3 / ((t+1)**3).max()) / ((t+1)**3 / ((t+1)**3).max()).mean(), + 'description': 'Quadratic weight: Weights increase cubically from 0 to 1, normalized by the average weight' + }, + 'inverse': { + 'function': lambda t: ((t+1)**-1 / ((t+1)**-1).max()) / ((t+1)**-2 / ((t+1)**-1).max()).mean(), + 'description': 'Inverse weight: Weights decrease inversely, normalized by the average weight' + }, + 'inverse_squared': { + 'function': lambda t: ((t+1)**-2 / ((t+1)**-2).max()) / ((t+1)**-2 / ((t+1)**-2).max()).mean(), + 'description': 'Inverse squared weight: Weights decrease inversely squared, normalized by the average weight' + }, + 'inverse_cubed': { + 'function': lambda t: ((t+1)**-3 / ((t+1)**-3).max()) / ((t+1)**-3 / ((t+1)**-3).max()).mean(), + 'description': 'Inverse cubed weight: Weights decrease inversely cubed, normalized by the average weight' + } +} + +# Training loop for each weight function +for name, weight_info in weight_functions.items(): + controller = PendulumController().to(device) + pendulum_dynamics = PendulumDynamics(controller, m, R, g).to(device) + optimizer = optim.Adam(controller.parameters(), lr=learning_rate, weight_decay=weight_decay) + loss_fn = make_loss_fn(weight_info['function']) + + # File paths + function_output_dir = os.path.join(output_dir, name) + controllers_dir = os.path.join(function_output_dir, "controllers") + + # Check if controllers directory exists and remove it + if os.path.exists(controllers_dir): + shutil.rmtree(controllers_dir) + os.makedirs(controllers_dir, exist_ok=True) + + config_file = os.path.join(function_output_dir, "training_config.txt") + log_file = os.path.join(function_output_dir, "training_log.csv") + + # Overwrite configuration and log files + with open(config_file, "w") as f: + f.write(f"Random Seed: {random_seed}\n") + f.write(f"Time Span: {t_start} to {t_end}, Points: {t_points}\n") + f.write(f"Learning Rate: {learning_rate}\n") + f.write(f"Weight Decay: {weight_decay}\n") + f.write("\nLoss Function:\n") + f.write(inspect.getsource(loss_fn)) + f.write("\nTraining Cases:\n") + f.write("[theta0, omega0, alpha0, desired_theta]\n") + for case in state_0.cpu().numpy(): + f.write(f"{case.tolist()}\n") + + with open(log_file, "w", newline="") as csvfile: + csv_writer = csv.writer(csvfile) + csv_writer.writerow(["Epoch", "Loss"]) + + # Training loop + for epoch in range(num_epochs): + optimizer.zero_grad() + state_traj = odeint(pendulum_dynamics, state_0, t_span, method='rk4') + loss = loss_fn(state_traj, t_span) + loss.backward() + optimizer.step() + + # Logging + with open(log_file, "a", newline="") as csvfile: + csv_writer = csv.writer(csvfile) + csv_writer.writerow([epoch, loss.item()]) + + # Save the model + model_file = os.path.join(controllers_dir, f"controller_{epoch}.pth") + torch.save(controller.state_dict(), model_file) + print(f"{model_file} saved with loss: {loss}") + +print("Training complete. Models and logs are saved under respective directories for each loss function.") \ No newline at end of file diff --git a/training/normalized/initial_conditions.py b/training/initial_conditions.py similarity index 100% rename from training/normalized/initial_conditions.py rename to training/initial_conditions.py diff --git a/training/max_normalized_trainer.py b/training/max_normalized_trainer.py new file mode 100644 index 0000000..fe59bbd --- /dev/null +++ b/training/max_normalized_trainer.py @@ -0,0 +1,159 @@ +import torch +import torch.optim as optim +from torchdiffeq import odeint +import numpy as np +import os +import shutil +import csv +import inspect + +from PendulumController import PendulumController +from PendulumDynamics import PendulumDynamics + +# Device setup +device = torch.device("cpu") + +# Initial conditions (theta0, omega0, alpha0, desired_theta) +from initial_conditions import initial_conditions +state_0 = torch.tensor(initial_conditions, dtype=torch.float32, device=device) + +# Device setup +device = torch.device("cpu") + +# Constants +m = 10.0 +g = 9.81 +R = 1.0 + +# Time grid +t_start, t_end, t_points = 0, 10, 1000 +t_span = torch.linspace(t_start, t_end, t_points, device=device) + +# Specify directory for storing results +output_dir = "max_normalized" +os.makedirs(output_dir, exist_ok=True) + +# Use a previously generated random seed +random_seed = 4529 + +# Set the seeds for reproducibility +torch.manual_seed(random_seed) +np.random.seed(random_seed) + +# Print the chosen random seed +print(f"Random seed for torch and numpy: {random_seed}") + +# Initialize controller and dynamics +controller = PendulumController().to(device) +pendulum_dynamics = PendulumDynamics(controller, m, R, g).to(device) + +# Optimizer setup +learning_rate = 1e-1 +weight_decay = 1e-4 +optimizer = optim.Adam(controller.parameters(), lr=learning_rate, weight_decay=weight_decay) + +# Training parameters +num_epochs = 1001 + +# Define loss functions +def make_loss_fn(weight_fn): + def loss_fn(state_traj, t_span): + theta = state_traj[:, :, 0] # Size: [batch_size, t_points] + desired_theta = state_traj[:, :, 3] # Size: [batch_size, t_points] + weights = weight_fn(t_span) # Initially Size: [t_points] + + # Reshape or expand weights to match theta dimensions + weights = weights.view(-1, 1) # Now Size: [batch_size, t_points] + + # Calculate the weighted loss + return torch.mean(weights * (theta - desired_theta) ** 2) + + return loss_fn + +# Define and store weight functions with descriptions +weight_functions = { + 'constant': { + 'function': lambda t: torch.ones_like(t), + 'description': 'Constant weight: All weights are 1' + }, + 'linear': { + 'function': lambda t: (t+1) / (t+1).max(), + 'description': 'Linear weight: Weights increase linearly, normalized by max' + }, + 'quadratic': { + 'function': lambda t: (t+1)**2 / ((t+1)**2).max(), + 'description': 'Quadratic weight: Weights increase quadratically, normalized by max' + }, + 'cubic': { + 'function': lambda t: (t+1)**3 / ((t+1)**3).max(), + 'description': 'Quadratic weight: Weights increase cubically, normalized by max' + }, + 'inverse': { + 'function': lambda t: (t+1)**-1 / ((t+1)**-1).max(), + 'description': 'Inverse weight: Weights decrease inversely, normalized by max' + }, + 'inverse_squared': { + 'function': lambda t: (t+1)**-2 / ((t+1)**-1).max(), + 'description': 'Inverse squared weight: Weights decrease inversely squared, normalized by max' + }, + 'inverse_cubed': { + 'function': lambda t: (t+1)**-3 / ((t+1)**-1).max(), + 'description': 'Inverse cubed weight: Weights decrease inversely cubed, normalized by max' + } +} + +# Training loop for each weight function +for name, weight_info in weight_functions.items(): + controller = PendulumController().to(device) + pendulum_dynamics = PendulumDynamics(controller, m, R, g).to(device) + optimizer = optim.Adam(controller.parameters(), lr=learning_rate, weight_decay=weight_decay) + loss_fn = make_loss_fn(weight_info['function']) + + # File paths + function_output_dir = os.path.join(output_dir, name) + controllers_dir = os.path.join(function_output_dir, "controllers") + + # Check if controllers directory exists and remove it + if os.path.exists(controllers_dir): + shutil.rmtree(controllers_dir) + os.makedirs(controllers_dir, exist_ok=True) + + config_file = os.path.join(function_output_dir, "training_config.txt") + log_file = os.path.join(function_output_dir, "training_log.csv") + + # Overwrite configuration and log files + with open(config_file, "w") as f: + f.write(f"Random Seed: {random_seed}\n") + f.write(f"Time Span: {t_start} to {t_end}, Points: {t_points}\n") + f.write(f"Learning Rate: {learning_rate}\n") + f.write(f"Weight Decay: {weight_decay}\n") + f.write("\nLoss Function:\n") + f.write(inspect.getsource(loss_fn)) + f.write("\nTraining Cases:\n") + f.write("[theta0, omega0, alpha0, desired_theta]\n") + for case in state_0.cpu().numpy(): + f.write(f"{case.tolist()}\n") + + with open(log_file, "w", newline="") as csvfile: + csv_writer = csv.writer(csvfile) + csv_writer.writerow(["Epoch", "Loss"]) + + # Training loop + for epoch in range(num_epochs): + optimizer.zero_grad() + state_traj = odeint(pendulum_dynamics, state_0, t_span, method='rk4') + loss = loss_fn(state_traj, t_span) + loss.backward() + optimizer.step() + + # Logging + with open(log_file, "a", newline="") as csvfile: + csv_writer = csv.writer(csvfile) + csv_writer.writerow([epoch, loss.item()]) + + # Save the model + model_file = os.path.join(controllers_dir, f"controller_{epoch}.pth") + torch.save(controller.state_dict(), model_file) + print(f"{model_file} saved with loss: {loss}") + +print("Training complete. Models and logs are saved under respective directories for each loss function.") \ No newline at end of file diff --git a/training/non-normalized/cubic_time_weight/trainer_cubic_time_weights.py b/training/old/non-normalized/cubic_time_weight/trainer_cubic_time_weights.py similarity index 100% rename from training/non-normalized/cubic_time_weight/trainer_cubic_time_weights.py rename to training/old/non-normalized/cubic_time_weight/trainer_cubic_time_weights.py diff --git a/training/non-normalized/cubic_time_weight/training_config.txt b/training/old/non-normalized/cubic_time_weight/training_config.txt similarity index 100% rename from training/non-normalized/cubic_time_weight/training_config.txt rename to training/old/non-normalized/cubic_time_weight/training_config.txt diff --git a/training/non-normalized/cubic_time_weight/training_log.csv b/training/old/non-normalized/cubic_time_weight/training_log.csv similarity index 100% rename from training/non-normalized/cubic_time_weight/training_log.csv rename to training/old/non-normalized/cubic_time_weight/training_log.csv diff --git a/training/non-normalized/exponential_time_weight/trainer_exponential_time_weights.py b/training/old/non-normalized/exponential_time_weight/trainer_exponential_time_weights.py similarity index 100% rename from training/non-normalized/exponential_time_weight/trainer_exponential_time_weights.py rename to training/old/non-normalized/exponential_time_weight/trainer_exponential_time_weights.py diff --git a/training/non-normalized/exponential_time_weight/training_config.txt b/training/old/non-normalized/exponential_time_weight/training_config.txt similarity index 100% rename from training/non-normalized/exponential_time_weight/training_config.txt rename to training/old/non-normalized/exponential_time_weight/training_config.txt diff --git a/training/non-normalized/exponential_time_weight/training_log.csv b/training/old/non-normalized/exponential_time_weight/training_log.csv similarity index 100% rename from training/non-normalized/exponential_time_weight/training_log.csv rename to training/old/non-normalized/exponential_time_weight/training_log.csv diff --git a/training/non-normalized/inverse_time_weight/trainer_inverse_time_weights.py b/training/old/non-normalized/inverse_time_weight/trainer_inverse_time_weights.py similarity index 100% rename from training/non-normalized/inverse_time_weight/trainer_inverse_time_weights.py rename to training/old/non-normalized/inverse_time_weight/trainer_inverse_time_weights.py diff --git a/training/non-normalized/inverse_time_weight/training_config.txt b/training/old/non-normalized/inverse_time_weight/training_config.txt similarity index 100% rename from training/non-normalized/inverse_time_weight/training_config.txt rename to training/old/non-normalized/inverse_time_weight/training_config.txt diff --git a/training/non-normalized/inverse_time_weight/training_log.csv b/training/old/non-normalized/inverse_time_weight/training_log.csv similarity index 100% rename from training/non-normalized/inverse_time_weight/training_log.csv rename to training/old/non-normalized/inverse_time_weight/training_log.csv diff --git a/training/non-normalized/linear_time_weight/trainer_linear_time_weights.py b/training/old/non-normalized/linear_time_weight/trainer_linear_time_weights.py similarity index 100% rename from training/non-normalized/linear_time_weight/trainer_linear_time_weights.py rename to training/old/non-normalized/linear_time_weight/trainer_linear_time_weights.py diff --git a/training/non-normalized/linear_time_weight/training_config.txt b/training/old/non-normalized/linear_time_weight/training_config.txt similarity index 100% rename from training/non-normalized/linear_time_weight/training_config.txt rename to training/old/non-normalized/linear_time_weight/training_config.txt diff --git a/training/non-normalized/linear_time_weight/training_log.csv b/training/old/non-normalized/linear_time_weight/training_log.csv similarity index 100% rename from training/non-normalized/linear_time_weight/training_log.csv rename to training/old/non-normalized/linear_time_weight/training_log.csv diff --git a/training/non-normalized/no_time_weight/trainer_no_time_weights.py b/training/old/non-normalized/no_time_weight/trainer_no_time_weights.py similarity index 100% rename from training/non-normalized/no_time_weight/trainer_no_time_weights.py rename to training/old/non-normalized/no_time_weight/trainer_no_time_weights.py diff --git a/training/non-normalized/no_time_weight/training_config.txt b/training/old/non-normalized/no_time_weight/training_config.txt similarity index 100% rename from training/non-normalized/no_time_weight/training_config.txt rename to training/old/non-normalized/no_time_weight/training_config.txt diff --git a/training/non-normalized/no_time_weight/training_log.csv b/training/old/non-normalized/no_time_weight/training_log.csv similarity index 100% rename from training/non-normalized/no_time_weight/training_log.csv rename to training/old/non-normalized/no_time_weight/training_log.csv diff --git a/training/non-normalized/no_time_weight/validator.py b/training/old/non-normalized/no_time_weight/validator.py similarity index 100% rename from training/non-normalized/no_time_weight/validator.py rename to training/old/non-normalized/no_time_weight/validator.py diff --git a/training/non-normalized/quadratic_time_weight/trainer_quadratic_time_weights.py b/training/old/non-normalized/quadratic_time_weight/trainer_quadratic_time_weights.py similarity index 100% rename from training/non-normalized/quadratic_time_weight/trainer_quadratic_time_weights.py rename to training/old/non-normalized/quadratic_time_weight/trainer_quadratic_time_weights.py diff --git a/training/non-normalized/quadratic_time_weight/training_config.txt b/training/old/non-normalized/quadratic_time_weight/training_config.txt similarity index 100% rename from training/non-normalized/quadratic_time_weight/training_config.txt rename to training/old/non-normalized/quadratic_time_weight/training_config.txt diff --git a/training/non-normalized/quadratic_time_weight/training_log.csv b/training/old/non-normalized/quadratic_time_weight/training_log.csv similarity index 100% rename from training/non-normalized/quadratic_time_weight/training_log.csv rename to training/old/non-normalized/quadratic_time_weight/training_log.csv diff --git a/training/old/normalized/PendulumController.py b/training/old/normalized/PendulumController.py new file mode 100644 index 0000000..1c9333c --- /dev/null +++ b/training/old/normalized/PendulumController.py @@ -0,0 +1,17 @@ +import torch +import torch.nn as nn + +class PendulumController(nn.Module): + def __init__(self): + super().__init__() + self.net = nn.Sequential( + nn.Linear(4, 64), + nn.ReLU(), + nn.Linear(64, 64), + nn.ReLU(), + nn.Linear(64, 1) + ) + + def forward(self, x): + raw_torque = self.net(x) + return torch.clamp(raw_torque, -250, 250) \ No newline at end of file diff --git a/training/old/normalized/PendulumDynamics.py b/training/old/normalized/PendulumDynamics.py new file mode 100644 index 0000000..806d3e6 --- /dev/null +++ b/training/old/normalized/PendulumDynamics.py @@ -0,0 +1,26 @@ +import torch +import torch.nn as nn + +class PendulumDynamics(nn.Module): + def __init__(self, controller, m:'float'=1, R:'float'=1, g:'float'=9.81): + super().__init__() + self.controller = controller + self.m: 'float' = m + self.R: 'float' = R + self.g: 'float' = g + + def forward(self, t, state): + # Get the current values from the state + theta, omega, alpha, desired_theta = state[:, 0], state[:, 1], state[:, 2], state[:, 3] + + # Make the input stack for the controller + input = torch.stack([theta, omega, alpha, desired_theta], dim=1) + + # Get the torque (the output of the neural network) + tau = self.controller(input).squeeze(-1) + + # Relax alpha + alpha_desired = (self.g / self.R) * torch.sin(theta) + tau / (self.m * self.R**2) + dalpha = alpha_desired - alpha + + return torch.stack([omega, alpha, dalpha, torch.zeros_like(desired_theta)], dim=1) \ No newline at end of file diff --git a/training/normalized/__pycache__/PendulumController.cpython-310.pyc b/training/old/normalized/__pycache__/PendulumController.cpython-310.pyc similarity index 100% rename from training/normalized/__pycache__/PendulumController.cpython-310.pyc rename to training/old/normalized/__pycache__/PendulumController.cpython-310.pyc diff --git a/training/normalized/__pycache__/PendulumDynamics.cpython-310.pyc b/training/old/normalized/__pycache__/PendulumDynamics.cpython-310.pyc similarity index 100% rename from training/normalized/__pycache__/PendulumDynamics.cpython-310.pyc rename to training/old/normalized/__pycache__/PendulumDynamics.cpython-310.pyc diff --git a/training/normalized/__pycache__/initial_conditions.cpython-310.pyc b/training/old/normalized/__pycache__/initial_conditions.cpython-310.pyc similarity index 100% rename from training/normalized/__pycache__/initial_conditions.cpython-310.pyc rename to training/old/normalized/__pycache__/initial_conditions.cpython-310.pyc diff --git a/training/normalized/average_normalized/constant/training_config.txt b/training/old/normalized/average_normalized/constant/training_config.txt similarity index 100% rename from training/normalized/average_normalized/constant/training_config.txt rename to training/old/normalized/average_normalized/constant/training_config.txt diff --git a/training/normalized/average_normalized/constant/training_log.csv b/training/old/normalized/average_normalized/constant/training_log.csv similarity index 100% rename from training/normalized/average_normalized/constant/training_log.csv rename to training/old/normalized/average_normalized/constant/training_log.csv diff --git a/training/normalized/average_normalized/exponential/training_config.txt b/training/old/normalized/average_normalized/exponential/training_config.txt similarity index 100% rename from training/normalized/average_normalized/exponential/training_config.txt rename to training/old/normalized/average_normalized/exponential/training_config.txt diff --git a/training/normalized/average_normalized/exponential/training_log.csv b/training/old/normalized/average_normalized/exponential/training_log.csv similarity index 100% rename from training/normalized/average_normalized/exponential/training_log.csv rename to training/old/normalized/average_normalized/exponential/training_log.csv diff --git a/training/normalized/average_normalized/inverse/training_config.txt b/training/old/normalized/average_normalized/inverse/training_config.txt similarity index 100% rename from training/normalized/average_normalized/inverse/training_config.txt rename to training/old/normalized/average_normalized/inverse/training_config.txt diff --git a/training/normalized/average_normalized/inverse/training_log.csv b/training/old/normalized/average_normalized/inverse/training_log.csv similarity index 100% rename from training/normalized/average_normalized/inverse/training_log.csv rename to training/old/normalized/average_normalized/inverse/training_log.csv diff --git a/training/normalized/average_normalized/inverse_squared/training_config.txt b/training/old/normalized/average_normalized/inverse_squared/training_config.txt similarity index 100% rename from training/normalized/average_normalized/inverse_squared/training_config.txt rename to training/old/normalized/average_normalized/inverse_squared/training_config.txt diff --git a/training/normalized/average_normalized/inverse_squared/training_log.csv b/training/old/normalized/average_normalized/inverse_squared/training_log.csv similarity index 57% rename from training/normalized/average_normalized/inverse_squared/training_log.csv rename to training/old/normalized/average_normalized/inverse_squared/training_log.csv index 455c48a..94c45ca 100644 --- a/training/normalized/average_normalized/inverse_squared/training_log.csv +++ b/training/old/normalized/average_normalized/inverse_squared/training_log.csv @@ -606,3 +606,397 @@ Epoch,Loss 604,4.493722915649414 605,4.493655681610107 606,4.493587970733643 +607,4.493524074554443 +608,4.493460178375244 +609,4.4933929443359375 +610,4.493329048156738 +611,4.493264675140381 +612,4.493199348449707 +613,4.493133544921875 +614,4.493070125579834 +615,4.493004322052002 +616,4.4929399490356445 +617,4.492875576019287 +618,4.492810249328613 +619,4.492745876312256 +620,4.492680549621582 +621,4.492616653442383 +622,4.492551803588867 +623,4.49248743057251 +624,4.492423057556152 +625,4.492358684539795 +626,4.492295265197754 +627,4.492230415344238 +628,4.492166519165039 +629,4.492102146148682 +630,4.492038726806641 +631,4.4919753074646 +632,4.491911888122559 +633,4.491847991943359 +634,4.491784572601318 +635,4.491720676422119 +636,4.49165678024292 +637,4.491593360900879 +638,4.491530418395996 +639,4.491466522216797 +640,4.491403579711914 +641,4.4913411140441895 +642,4.49127721786499 +643,4.491214275360107 +644,4.491150379180908 +645,4.491087436676025 +646,4.491024017333984 +647,4.490961074829102 +648,4.490898132324219 +649,4.490834712982178 +650,4.490771293640137 +651,4.490707874298096 +652,4.490644454956055 +653,4.4905805587768555 +654,4.490517616271973 +655,4.490454196929932 +656,4.490390777587891 +657,4.490326881408691 +658,4.49026346206665 +659,4.490200042724609 +660,4.49013614654541 +661,4.490072250366211 +662,4.490008354187012 +663,4.489945888519287 +664,4.48988151550293 +665,4.489817142486572 +666,4.489753246307373 +667,4.489689350128174 +668,4.489624977111816 +669,4.489560604095459 +670,4.489496231079102 +671,4.489431858062744 +672,4.4893670082092285 +673,4.489302158355713 +674,4.4892377853393555 +675,4.489172458648682 +676,4.48910665512085 +677,4.489041328430176 +678,4.4889750480651855 +679,4.4889092445373535 +680,4.488842487335205 +681,4.488775730133057 +682,4.488708972930908 +683,4.488641262054443 +684,4.488574028015137 +685,4.48850679397583 +686,4.488439083099365 +687,4.4883713722229 +688,4.488302707672119 +689,4.488234519958496 +690,4.488166332244873 +691,4.48809814453125 +692,4.488029956817627 +693,4.487961769104004 +694,4.487893581390381 +695,4.487825870513916 +696,4.487757682800293 +697,4.487689971923828 +698,4.4876227378845215 +699,4.487557411193848 +700,4.487490653991699 +701,4.487423896789551 +702,4.487358570098877 +703,4.487292766571045 +704,4.487227439880371 +705,4.487162113189697 +706,4.487096786499023 +707,4.48703145980835 +708,4.486966133117676 +709,4.4868998527526855 +710,4.486833572387695 +711,4.486767768859863 +712,4.486701488494873 +713,4.486634731292725 +714,4.486567974090576 +715,4.486501693725586 +716,4.486433982849121 +717,4.4863667488098145 +718,4.486299514770508 +719,4.486231327056885 +720,4.486163139343262 +721,4.486096382141113 +722,4.486027717590332 +723,4.485958576202393 +724,4.485890865325928 +725,4.485822677612305 +726,4.485753536224365 +727,4.485684871673584 +728,4.485615253448486 +729,4.485546112060547 +730,4.485476970672607 +731,4.485407829284668 +732,4.4853386878967285 +733,4.485268592834473 +734,4.485199451446533 +735,4.4851298332214355 +736,4.485060691833496 +737,4.484994411468506 +738,4.48492956161499 +739,4.484865665435791 +740,4.484802722930908 +741,4.484740257263184 +742,4.484678268432617 +743,4.484616279602051 +744,4.484555244445801 +745,4.484492778778076 +746,4.484431266784668 +747,4.484369277954102 +748,4.484306812286377 +749,4.484243869781494 +750,4.4841814041137695 +751,4.484118461608887 +752,4.484055042266846 +753,4.483991622924805 +754,4.483928203582764 +755,4.483865261077881 +756,4.483801364898682 +757,4.483737945556641 +758,4.4836745262146 +759,4.483611106872559 +760,4.483547687530518 +761,4.483484745025635 +762,4.483421325683594 +763,4.483358860015869 +764,4.48329496383667 +765,4.483232021331787 +766,4.483169078826904 +767,4.483105659484863 +768,4.483042240142822 +769,4.4829792976379395 +770,4.482916355133057 +771,4.482852935791016 +772,4.482789993286133 +773,4.482726573944092 +774,4.482663154602051 +775,4.482599258422852 +776,4.482536315917969 +777,4.4824724197387695 +778,4.4824090003967285 +779,4.482345104217529 +780,4.482281684875488 +781,4.482217788696289 +782,4.482153415679932 +783,4.482089519500732 +784,4.482025623321533 +785,4.481961727142334 +786,4.481897830963135 +787,4.4818339347839355 +788,4.481770038604736 +789,4.481706142425537 +790,4.481642246246338 +791,4.481578350067139 +792,4.481513977050781 +793,4.481450080871582 +794,4.481386184692383 +795,4.481322765350342 +796,4.481258392333984 +797,4.481194019317627 +798,4.481130599975586 +799,4.4810662269592285 +800,4.481001377105713 +801,4.480937957763672 +802,4.4808735847473145 +803,4.480809688568115 +804,4.4807448387146 +805,4.4806809425354 +806,4.480616569519043 +807,4.4805521965026855 +808,4.480487823486328 +809,4.480423450469971 +810,4.480358600616455 +811,4.480294227600098 +812,4.48022985458374 +813,4.480165004730225 +814,4.480099678039551 +815,4.480034351348877 +816,4.479968547821045 +817,4.479902744293213 +818,4.479836463928223 +819,4.479771137237549 +820,4.479704856872559 +821,4.479638576507568 +822,4.47957181930542 +823,4.47950553894043 +824,4.479438781738281 +825,4.479372024536133 +826,4.479305267333984 +827,4.479238510131836 +828,4.479171276092529 +829,4.4791035652160645 +830,4.479036808013916 +831,4.478969573974609 +832,4.4789018630981445 +833,4.478835105895996 +834,4.478767395019531 +835,4.478700637817383 +836,4.478632926940918 +837,4.478565216064453 +838,4.4784979820251465 +839,4.478430271148682 +840,4.478362560272217 +841,4.478294849395752 +842,4.478226661682129 +843,4.478158950805664 +844,4.478091239929199 +845,4.478022575378418 +846,4.477955341339111 +847,4.477887153625488 +848,4.477819442749023 +849,4.4777512550354 +850,4.477683067321777 +851,4.4776153564453125 +852,4.477546691894531 +853,4.477478504180908 +854,4.477409839630127 +855,4.477341651916504 +856,4.477272987365723 +857,4.477204322814941 +858,4.47713565826416 +859,4.477067470550537 +860,4.476998805999756 +861,4.476930141448975 +862,4.476861000061035 +863,4.476792812347412 +864,4.476723670959473 +865,4.476655006408691 +866,4.476585865020752 +867,4.476517200469971 +868,4.476449012756348 +869,4.476378917694092 +870,4.476309776306152 +871,4.476241111755371 +872,4.476171970367432 +873,4.47610330581665 +874,4.476034164428711 +875,4.475964546203613 +876,4.475895404815674 +877,4.475825786590576 +878,4.475756645202637 +879,4.475687503814697 +880,4.4756178855896 +881,4.475549221038818 +882,4.475479602813721 +883,4.475409984588623 +884,4.475341320037842 +885,4.475271701812744 +886,4.4752020835876465 +887,4.475131988525391 +888,4.475062370300293 +889,4.4749932289123535 +890,4.474924087524414 +891,4.474853515625 +892,4.4747843742370605 +893,4.474715232849121 +894,4.474645614624023 +895,4.474575519561768 +896,4.47450590133667 +897,4.474436283111572 +898,4.474366188049316 +899,4.474296569824219 +900,4.474226474761963 +901,4.474156379699707 +902,4.474086761474609 +903,4.474017143249512 +904,4.473945617675781 +905,4.473875522613525 +906,4.473804473876953 +907,4.473733901977539 +908,4.473662853240967 +909,4.4735918045043945 +910,4.473520755767822 +911,4.47344970703125 +912,4.4733781814575195 +913,4.473306655883789 +914,4.473235607147217 +915,4.4731645584106445 +916,4.473092555999756 +917,4.473021507263184 +918,4.472950458526611 +919,4.472878456115723 +920,4.472806930541992 +921,4.472735404968262 +922,4.472663879394531 +923,4.472591400146484 +924,4.472519397735596 +925,4.472448348999023 +926,4.472375869750977 +927,4.47230339050293 +928,4.472231388092041 +929,4.472158432006836 +930,4.472086429595947 +931,4.472013473510742 +932,4.471940994262695 +933,4.471868991851807 +934,4.47179651260376 +935,4.471723556518555 +936,4.47165060043335 +937,4.471578121185303 +938,4.471505641937256 +939,4.471432685852051 +940,4.471360206604004 +941,4.471286773681641 +942,4.471214294433594 +943,4.4711408615112305 +944,4.471068382263184 +945,4.47099494934082 +946,4.470921993255615 +947,4.470848560333252 +948,4.4707746505737305 +949,4.470701694488525 +950,4.47062873840332 +951,4.470555305480957 +952,4.4704813957214355 +953,4.470407962799072 +954,4.470334529876709 +955,4.4702606201171875 +956,4.470187187194824 +957,4.470113754272461 +958,4.4700398445129395 +959,4.46996545791626 +960,4.4698920249938965 +961,4.469819068908691 +962,4.4697442054748535 +963,4.469670295715332 +964,4.4695963859558105 +965,4.469522476196289 +966,4.469448089599609 +967,4.46937370300293 +968,4.469299793243408 +969,4.46922492980957 +970,4.469151496887207 +971,4.469076156616211 +972,4.469001770019531 +973,4.468927383422852 +974,4.4688520431518555 +975,4.468777179718018 +976,4.4687018394470215 +977,4.468626499176025 +978,4.468551158905029 +979,4.468475818634033 +980,4.468400001525879 +981,4.468324184417725 +982,4.46824836730957 +983,4.468173503875732 +984,4.468097686767578 +985,4.468020915985107 +986,4.4679460525512695 +987,4.467870235443115 +988,4.467795372009277 +989,4.467719554901123 +990,4.467644214630127 +991,4.467568397521973 +992,4.46749210357666 +993,4.4674153327941895 +994,4.4673380851745605 +995,4.467259883880615 +996,4.46718168258667 +997,4.467103481292725 +998,4.467024326324463 +999,4.466945171356201 +1000,4.4668660163879395 diff --git a/training/normalized/average_normalized/linear/training_config.txt b/training/old/normalized/average_normalized/linear/training_config.txt similarity index 100% rename from training/normalized/average_normalized/linear/training_config.txt rename to training/old/normalized/average_normalized/linear/training_config.txt diff --git a/training/normalized/average_normalized/linear/training_log.csv b/training/old/normalized/average_normalized/linear/training_log.csv similarity index 100% rename from training/normalized/average_normalized/linear/training_log.csv rename to training/old/normalized/average_normalized/linear/training_log.csv diff --git a/training/normalized/average_normalized/quadratic/training_config.txt b/training/old/normalized/average_normalized/quadratic/training_config.txt similarity index 100% rename from training/normalized/average_normalized/quadratic/training_config.txt rename to training/old/normalized/average_normalized/quadratic/training_config.txt diff --git a/training/normalized/average_normalized/quadratic/training_log.csv b/training/old/normalized/average_normalized/quadratic/training_log.csv similarity index 100% rename from training/normalized/average_normalized/quadratic/training_log.csv rename to training/old/normalized/average_normalized/quadratic/training_log.csv diff --git a/training/normalized/average_normalized_trainer.py b/training/old/normalized/average_normalized_trainer.py similarity index 100% rename from training/normalized/average_normalized_trainer.py rename to training/old/normalized/average_normalized_trainer.py diff --git a/training/old/normalized/initial_conditions.py b/training/old/normalized/initial_conditions.py new file mode 100644 index 0000000..795ecae --- /dev/null +++ b/training/old/normalized/initial_conditions.py @@ -0,0 +1,27 @@ +import torch +from torch import pi + +initial_conditions = [ + [1/6 * pi, 0.0, 0.0, 0.0], + [-1/6 * pi, 0.0, 0.0, 0.0], + [2/3 * pi, 0.0, 0.0, 0.0], + [-2/3 * pi, 0.0, 0.0, 0.0], + [0.0, 1/3 * pi, 0.0, 0.0], + [0.0, -1/3 * pi, 0.0, 0.0], + [0.0, 2 * pi, 0.0, 0.0], + [0.0, -2 * pi, 0.0, 0.0], + [0.0, 0.0, 0.0, 2 * pi], + [0.0, 0.0, 0.0, -2 * pi], + [0.0, 0.0, 0.0, 1/2 * pi], + [0.0, 0.0, 0.0, -1/2 * pi], + [0.0, 0.0, 0.0, 1/3 * pi], + [0.0, 0.0, 0.0, -1/3 * pi], + [1/4 * pi, 1 * pi, 0.0, 0.0], + [-1/4 * pi, -1 * pi, 0.0, 0.0], + [1/2 * pi, -1 * pi, 0.0, 1/3 * pi], + [-1/2 * pi, 1 * pi, 0.0, -1/3 * pi], + [1/4 * pi, 1 * pi, 0.0, 2 * pi], + [-1/4 * pi, -1 * pi, 0.0, 2 * pi], + [1/2 * pi, -1 * pi, 0.0, 4 * pi], + [-1/2 * pi, 1 * pi, 0.0, -4 * pi], +] \ No newline at end of file diff --git a/training/normalized/max_normalized/constant/training_config.txt b/training/old/normalized/max_normalized/constant/training_config.txt similarity index 100% rename from training/normalized/max_normalized/constant/training_config.txt rename to training/old/normalized/max_normalized/constant/training_config.txt diff --git a/training/normalized/max_normalized/constant/training_log.csv b/training/old/normalized/max_normalized/constant/training_log.csv similarity index 100% rename from training/normalized/max_normalized/constant/training_log.csv rename to training/old/normalized/max_normalized/constant/training_log.csv diff --git a/training/normalized/max_normalized/exponential/training_config.txt b/training/old/normalized/max_normalized/exponential/training_config.txt similarity index 100% rename from training/normalized/max_normalized/exponential/training_config.txt rename to training/old/normalized/max_normalized/exponential/training_config.txt diff --git a/training/normalized/max_normalized/exponential/training_log.csv b/training/old/normalized/max_normalized/exponential/training_log.csv similarity index 100% rename from training/normalized/max_normalized/exponential/training_log.csv rename to training/old/normalized/max_normalized/exponential/training_log.csv diff --git a/training/normalized/max_normalized/inverse/training_config.txt b/training/old/normalized/max_normalized/inverse/training_config.txt similarity index 100% rename from training/normalized/max_normalized/inverse/training_config.txt rename to training/old/normalized/max_normalized/inverse/training_config.txt diff --git a/training/normalized/max_normalized/inverse/training_log.csv b/training/old/normalized/max_normalized/inverse/training_log.csv similarity index 100% rename from training/normalized/max_normalized/inverse/training_log.csv rename to training/old/normalized/max_normalized/inverse/training_log.csv diff --git a/training/normalized/max_normalized/inverse_squared/training_config.txt b/training/old/normalized/max_normalized/inverse_squared/training_config.txt similarity index 100% rename from training/normalized/max_normalized/inverse_squared/training_config.txt rename to training/old/normalized/max_normalized/inverse_squared/training_config.txt diff --git a/training/normalized/max_normalized/inverse_squared/training_log.csv b/training/old/normalized/max_normalized/inverse_squared/training_log.csv similarity index 100% rename from training/normalized/max_normalized/inverse_squared/training_log.csv rename to training/old/normalized/max_normalized/inverse_squared/training_log.csv diff --git a/training/normalized/max_normalized/linear/training_config.txt b/training/old/normalized/max_normalized/linear/training_config.txt similarity index 100% rename from training/normalized/max_normalized/linear/training_config.txt rename to training/old/normalized/max_normalized/linear/training_config.txt diff --git a/training/normalized/max_normalized/linear/training_log.csv b/training/old/normalized/max_normalized/linear/training_log.csv similarity index 100% rename from training/normalized/max_normalized/linear/training_log.csv rename to training/old/normalized/max_normalized/linear/training_log.csv diff --git a/training/normalized/max_normalized/quadratic/training_config.txt b/training/old/normalized/max_normalized/quadratic/training_config.txt similarity index 100% rename from training/normalized/max_normalized/quadratic/training_config.txt rename to training/old/normalized/max_normalized/quadratic/training_config.txt diff --git a/training/normalized/max_normalized/quadratic/training_log.csv b/training/old/normalized/max_normalized/quadratic/training_log.csv similarity index 100% rename from training/normalized/max_normalized/quadratic/training_log.csv rename to training/old/normalized/max_normalized/quadratic/training_log.csv diff --git a/training/normalized/max_normalized_trainer.py b/training/old/normalized/max_normalized_trainer.py similarity index 90% rename from training/normalized/max_normalized_trainer.py rename to training/old/normalized/max_normalized_trainer.py index a5255b5..72f3730 100644 --- a/training/normalized/max_normalized_trainer.py +++ b/training/old/normalized/max_normalized_trainer.py @@ -53,7 +53,7 @@ weight_decay = 1e-4 optimizer = optim.Adam(controller.parameters(), lr=learning_rate, weight_decay=weight_decay) # Training parameters -num_epochs = 1000 +num_epochs = 1001 # Define loss functions def make_loss_fn(weight_fn): @@ -73,28 +73,28 @@ def make_loss_fn(weight_fn): # Define and store weight functions with descriptions weight_functions = { 'constant': { - 'function': lambda t: torch.ones_like(t), - 'description': 'Constant weight: All weights are 1' + 'function': lambda t: torch.ones_like(t) / torch.ones_like(t).max(), + 'description': 'Constant weight: All weights are 1, normalized by the max (remains 1)' }, 'linear': { 'function': lambda t: (t / t.max()) / (t / t.max()).max(), - 'description': 'Linear weight: Weights increase linearly from 0 to 1, normalized by max' + 'description': 'Linear weight: Weights increase linearly from 0 to 1, normalized by the max weight' }, 'quadratic': { 'function': lambda t: ((t / t.max()) ** 2) / ((t / t.max()) ** 2).max(), - 'description': 'Quadratic weight: Weights increase quadratically from 0 to 1, normalized by max' + 'description': 'Quadratic weight: Weights increase quadratically from 0 to 1, normalized by the max weight' }, 'exponential': { 'function': lambda t: (torch.exp(t / t.max() * 2)) / (torch.exp(t / t.max() * 2)).max(), - 'description': 'Exponential weight: Weights increase exponentially, normalized by max' + 'description': 'Exponential weight: Weights increase exponentially, normalized by the max weight' }, 'inverse': { 'function': lambda t: (1 / (t / t.max() + 1)) / (1 / (t / t.max() + 1)).max(), - 'description': 'Inverse weight: Weights decrease inversely, normalized by max' + 'description': 'Inverse weight: Weights decrease inversely, normalized by the max weight' }, 'inverse_squared': { 'function': lambda t: (1 / ((t / t.max() + 1) ** 2)) / (1 / ((t / t.max() + 1) ** 2)).max(), - 'description': 'Inverse squared weight: Weights decrease inversely squared, normalized by max' + 'description': 'Inverse squared weight: Weights decrease inversely squared, normalized by the max weight' } } diff --git a/training/normalized/nohup.out b/training/old/normalized/nohup.out similarity index 91% rename from training/normalized/nohup.out rename to training/old/normalized/nohup.out index 8f43cf0..eb6dc0f 100644 --- a/training/normalized/nohup.out +++ b/training/old/normalized/nohup.out @@ -5540,3 +5540,469 @@ average_normalized/inverse_squared/controllers/controller_532.pth saved with los average_normalized/inverse_squared/controllers/controller_533.pth saved with loss: 4.49868631362915 average_normalized/inverse_squared/controllers/controller_534.pth saved with loss: 4.4986114501953125 average_normalized/inverse_squared/controllers/controller_535.pth saved with loss: 4.498536109924316 +average_normalized/inverse_squared/controllers/controller_536.pth saved with loss: 4.498461723327637 +average_normalized/inverse_squared/controllers/controller_537.pth saved with loss: 4.498386859893799 +average_normalized/inverse_squared/controllers/controller_538.pth saved with loss: 4.498311996459961 +average_normalized/inverse_squared/controllers/controller_539.pth saved with loss: 4.4982380867004395 +average_normalized/inverse_squared/controllers/controller_540.pth saved with loss: 4.498164653778076 +average_normalized/inverse_squared/controllers/controller_541.pth saved with loss: 4.498090744018555 +average_normalized/inverse_squared/controllers/controller_542.pth saved with loss: 4.498019218444824 +average_normalized/inverse_squared/controllers/controller_543.pth saved with loss: 4.497945308685303 +average_normalized/inverse_squared/controllers/controller_544.pth saved with loss: 4.497872829437256 +average_normalized/inverse_squared/controllers/controller_545.pth saved with loss: 4.497801303863525 +average_normalized/inverse_squared/controllers/controller_546.pth saved with loss: 4.497729301452637 +average_normalized/inverse_squared/controllers/controller_547.pth saved with loss: 4.49765682220459 +average_normalized/inverse_squared/controllers/controller_548.pth saved with loss: 4.497586250305176 +average_normalized/inverse_squared/controllers/controller_549.pth saved with loss: 4.49751615524292 +average_normalized/inverse_squared/controllers/controller_550.pth saved with loss: 4.497445106506348 +average_normalized/inverse_squared/controllers/controller_551.pth saved with loss: 4.49737548828125 +average_normalized/inverse_squared/controllers/controller_552.pth saved with loss: 4.497305870056152 +average_normalized/inverse_squared/controllers/controller_553.pth saved with loss: 4.49723482131958 +average_normalized/inverse_squared/controllers/controller_554.pth saved with loss: 4.497164726257324 +average_normalized/inverse_squared/controllers/controller_555.pth saved with loss: 4.497094631195068 +average_normalized/inverse_squared/controllers/controller_556.pth saved with loss: 4.497025012969971 +average_normalized/inverse_squared/controllers/controller_557.pth saved with loss: 4.496954441070557 +average_normalized/inverse_squared/controllers/controller_558.pth saved with loss: 4.496883392333984 +average_normalized/inverse_squared/controllers/controller_559.pth saved with loss: 4.496815204620361 +average_normalized/inverse_squared/controllers/controller_560.pth saved with loss: 4.4967451095581055 +average_normalized/inverse_squared/controllers/controller_561.pth saved with loss: 4.496673107147217 +average_normalized/inverse_squared/controllers/controller_562.pth saved with loss: 4.496603488922119 +average_normalized/inverse_squared/controllers/controller_563.pth saved with loss: 4.4965338706970215 +average_normalized/inverse_squared/controllers/controller_564.pth saved with loss: 4.496462821960449 +average_normalized/inverse_squared/controllers/controller_565.pth saved with loss: 4.496394157409668 +average_normalized/inverse_squared/controllers/controller_566.pth saved with loss: 4.496323585510254 +average_normalized/inverse_squared/controllers/controller_567.pth saved with loss: 4.496251583099365 +average_normalized/inverse_squared/controllers/controller_568.pth saved with loss: 4.496183395385742 +average_normalized/inverse_squared/controllers/controller_569.pth saved with loss: 4.49611234664917 +average_normalized/inverse_squared/controllers/controller_570.pth saved with loss: 4.496041774749756 +average_normalized/inverse_squared/controllers/controller_571.pth saved with loss: 4.4959716796875 +average_normalized/inverse_squared/controllers/controller_572.pth saved with loss: 4.495903491973877 +average_normalized/inverse_squared/controllers/controller_573.pth saved with loss: 4.4958343505859375 +average_normalized/inverse_squared/controllers/controller_574.pth saved with loss: 4.49576473236084 +average_normalized/inverse_squared/controllers/controller_575.pth saved with loss: 4.495695114135742 +average_normalized/inverse_squared/controllers/controller_576.pth saved with loss: 4.4956278800964355 +average_normalized/inverse_squared/controllers/controller_577.pth saved with loss: 4.4955573081970215 +average_normalized/inverse_squared/controllers/controller_578.pth saved with loss: 4.495490074157715 +average_normalized/inverse_squared/controllers/controller_579.pth saved with loss: 4.495420932769775 +average_normalized/inverse_squared/controllers/controller_580.pth saved with loss: 4.495352745056152 +average_normalized/inverse_squared/controllers/controller_581.pth saved with loss: 4.495282173156738 +average_normalized/inverse_squared/controllers/controller_582.pth saved with loss: 4.495216369628906 +average_normalized/inverse_squared/controllers/controller_583.pth saved with loss: 4.495147228240967 +average_normalized/inverse_squared/controllers/controller_584.pth saved with loss: 4.495075225830078 +average_normalized/inverse_squared/controllers/controller_585.pth saved with loss: 4.4950079917907715 +average_normalized/inverse_squared/controllers/controller_586.pth saved with loss: 4.494940757751465 +average_normalized/inverse_squared/controllers/controller_587.pth saved with loss: 4.494872093200684 +average_normalized/inverse_squared/controllers/controller_588.pth saved with loss: 4.494802951812744 +average_normalized/inverse_squared/controllers/controller_589.pth saved with loss: 4.494732856750488 +average_normalized/inverse_squared/controllers/controller_590.pth saved with loss: 4.494668483734131 +average_normalized/inverse_squared/controllers/controller_591.pth saved with loss: 4.494600296020508 +average_normalized/inverse_squared/controllers/controller_592.pth saved with loss: 4.494530200958252 +average_normalized/inverse_squared/controllers/controller_593.pth saved with loss: 4.494461536407471 +average_normalized/inverse_squared/controllers/controller_594.pth saved with loss: 4.494396209716797 +average_normalized/inverse_squared/controllers/controller_595.pth saved with loss: 4.49432897567749 +average_normalized/inverse_squared/controllers/controller_596.pth saved with loss: 4.494260787963867 +average_normalized/inverse_squared/controllers/controller_597.pth saved with loss: 4.494192123413086 +average_normalized/inverse_squared/controllers/controller_598.pth saved with loss: 4.4941229820251465 +average_normalized/inverse_squared/controllers/controller_599.pth saved with loss: 4.494059085845947 +average_normalized/inverse_squared/controllers/controller_600.pth saved with loss: 4.493993759155273 +average_normalized/inverse_squared/controllers/controller_601.pth saved with loss: 4.493923664093018 +average_normalized/inverse_squared/controllers/controller_602.pth saved with loss: 4.493853569030762 +average_normalized/inverse_squared/controllers/controller_603.pth saved with loss: 4.493789196014404 +average_normalized/inverse_squared/controllers/controller_604.pth saved with loss: 4.493722915649414 +average_normalized/inverse_squared/controllers/controller_605.pth saved with loss: 4.493655681610107 +average_normalized/inverse_squared/controllers/controller_606.pth saved with loss: 4.493587970733643 +average_normalized/inverse_squared/controllers/controller_607.pth saved with loss: 4.493524074554443 +average_normalized/inverse_squared/controllers/controller_608.pth saved with loss: 4.493460178375244 +average_normalized/inverse_squared/controllers/controller_609.pth saved with loss: 4.4933929443359375 +average_normalized/inverse_squared/controllers/controller_610.pth saved with loss: 4.493329048156738 +average_normalized/inverse_squared/controllers/controller_611.pth saved with loss: 4.493264675140381 +average_normalized/inverse_squared/controllers/controller_612.pth saved with loss: 4.493199348449707 +average_normalized/inverse_squared/controllers/controller_613.pth saved with loss: 4.493133544921875 +average_normalized/inverse_squared/controllers/controller_614.pth saved with loss: 4.493070125579834 +average_normalized/inverse_squared/controllers/controller_615.pth saved with loss: 4.493004322052002 +average_normalized/inverse_squared/controllers/controller_616.pth saved with loss: 4.4929399490356445 +average_normalized/inverse_squared/controllers/controller_617.pth saved with loss: 4.492875576019287 +average_normalized/inverse_squared/controllers/controller_618.pth saved with loss: 4.492810249328613 +average_normalized/inverse_squared/controllers/controller_619.pth saved with loss: 4.492745876312256 +average_normalized/inverse_squared/controllers/controller_620.pth saved with loss: 4.492680549621582 +average_normalized/inverse_squared/controllers/controller_621.pth saved with loss: 4.492616653442383 +average_normalized/inverse_squared/controllers/controller_622.pth saved with loss: 4.492551803588867 +average_normalized/inverse_squared/controllers/controller_623.pth saved with loss: 4.49248743057251 +average_normalized/inverse_squared/controllers/controller_624.pth saved with loss: 4.492423057556152 +average_normalized/inverse_squared/controllers/controller_625.pth saved with loss: 4.492358684539795 +average_normalized/inverse_squared/controllers/controller_626.pth saved with loss: 4.492295265197754 +average_normalized/inverse_squared/controllers/controller_627.pth saved with loss: 4.492230415344238 +average_normalized/inverse_squared/controllers/controller_628.pth saved with loss: 4.492166519165039 +average_normalized/inverse_squared/controllers/controller_629.pth saved with loss: 4.492102146148682 +average_normalized/inverse_squared/controllers/controller_630.pth saved with loss: 4.492038726806641 +average_normalized/inverse_squared/controllers/controller_631.pth saved with loss: 4.4919753074646 +average_normalized/inverse_squared/controllers/controller_632.pth saved with loss: 4.491911888122559 +average_normalized/inverse_squared/controllers/controller_633.pth saved with loss: 4.491847991943359 +average_normalized/inverse_squared/controllers/controller_634.pth saved with loss: 4.491784572601318 +average_normalized/inverse_squared/controllers/controller_635.pth saved with loss: 4.491720676422119 +average_normalized/inverse_squared/controllers/controller_636.pth saved with loss: 4.49165678024292 +average_normalized/inverse_squared/controllers/controller_637.pth saved with loss: 4.491593360900879 +average_normalized/inverse_squared/controllers/controller_638.pth saved with loss: 4.491530418395996 +average_normalized/inverse_squared/controllers/controller_639.pth saved with loss: 4.491466522216797 +average_normalized/inverse_squared/controllers/controller_640.pth saved with loss: 4.491403579711914 +average_normalized/inverse_squared/controllers/controller_641.pth saved with loss: 4.4913411140441895 +average_normalized/inverse_squared/controllers/controller_642.pth saved with loss: 4.49127721786499 +average_normalized/inverse_squared/controllers/controller_643.pth saved with loss: 4.491214275360107 +average_normalized/inverse_squared/controllers/controller_644.pth saved with loss: 4.491150379180908 +average_normalized/inverse_squared/controllers/controller_645.pth saved with loss: 4.491087436676025 +average_normalized/inverse_squared/controllers/controller_646.pth saved with loss: 4.491024017333984 +average_normalized/inverse_squared/controllers/controller_647.pth saved with loss: 4.490961074829102 +average_normalized/inverse_squared/controllers/controller_648.pth saved with loss: 4.490898132324219 +average_normalized/inverse_squared/controllers/controller_649.pth saved with loss: 4.490834712982178 +average_normalized/inverse_squared/controllers/controller_650.pth saved with loss: 4.490771293640137 +average_normalized/inverse_squared/controllers/controller_651.pth saved with loss: 4.490707874298096 +average_normalized/inverse_squared/controllers/controller_652.pth saved with loss: 4.490644454956055 +average_normalized/inverse_squared/controllers/controller_653.pth saved with loss: 4.4905805587768555 +average_normalized/inverse_squared/controllers/controller_654.pth saved with loss: 4.490517616271973 +average_normalized/inverse_squared/controllers/controller_655.pth saved with loss: 4.490454196929932 +average_normalized/inverse_squared/controllers/controller_656.pth saved with loss: 4.490390777587891 +average_normalized/inverse_squared/controllers/controller_657.pth saved with loss: 4.490326881408691 +average_normalized/inverse_squared/controllers/controller_658.pth saved with loss: 4.49026346206665 +average_normalized/inverse_squared/controllers/controller_659.pth saved with loss: 4.490200042724609 +average_normalized/inverse_squared/controllers/controller_660.pth saved with loss: 4.49013614654541 +average_normalized/inverse_squared/controllers/controller_661.pth saved with loss: 4.490072250366211 +average_normalized/inverse_squared/controllers/controller_662.pth saved with loss: 4.490008354187012 +average_normalized/inverse_squared/controllers/controller_663.pth saved with loss: 4.489945888519287 +average_normalized/inverse_squared/controllers/controller_664.pth saved with loss: 4.48988151550293 +average_normalized/inverse_squared/controllers/controller_665.pth saved with loss: 4.489817142486572 +average_normalized/inverse_squared/controllers/controller_666.pth saved with loss: 4.489753246307373 +average_normalized/inverse_squared/controllers/controller_667.pth saved with loss: 4.489689350128174 +average_normalized/inverse_squared/controllers/controller_668.pth saved with loss: 4.489624977111816 +average_normalized/inverse_squared/controllers/controller_669.pth saved with loss: 4.489560604095459 +average_normalized/inverse_squared/controllers/controller_670.pth saved with loss: 4.489496231079102 +average_normalized/inverse_squared/controllers/controller_671.pth saved with loss: 4.489431858062744 +average_normalized/inverse_squared/controllers/controller_672.pth saved with loss: 4.4893670082092285 +average_normalized/inverse_squared/controllers/controller_673.pth saved with loss: 4.489302158355713 +average_normalized/inverse_squared/controllers/controller_674.pth saved with loss: 4.4892377853393555 +average_normalized/inverse_squared/controllers/controller_675.pth saved with loss: 4.489172458648682 +average_normalized/inverse_squared/controllers/controller_676.pth saved with loss: 4.48910665512085 +average_normalized/inverse_squared/controllers/controller_677.pth saved with loss: 4.489041328430176 +average_normalized/inverse_squared/controllers/controller_678.pth saved with loss: 4.4889750480651855 +average_normalized/inverse_squared/controllers/controller_679.pth saved with loss: 4.4889092445373535 +average_normalized/inverse_squared/controllers/controller_680.pth saved with loss: 4.488842487335205 +average_normalized/inverse_squared/controllers/controller_681.pth saved with loss: 4.488775730133057 +average_normalized/inverse_squared/controllers/controller_682.pth saved with loss: 4.488708972930908 +average_normalized/inverse_squared/controllers/controller_683.pth saved with loss: 4.488641262054443 +average_normalized/inverse_squared/controllers/controller_684.pth saved with loss: 4.488574028015137 +average_normalized/inverse_squared/controllers/controller_685.pth saved with loss: 4.48850679397583 +average_normalized/inverse_squared/controllers/controller_686.pth saved with loss: 4.488439083099365 +average_normalized/inverse_squared/controllers/controller_687.pth saved with loss: 4.4883713722229 +average_normalized/inverse_squared/controllers/controller_688.pth saved with loss: 4.488302707672119 +average_normalized/inverse_squared/controllers/controller_689.pth saved with loss: 4.488234519958496 +average_normalized/inverse_squared/controllers/controller_690.pth saved with loss: 4.488166332244873 +average_normalized/inverse_squared/controllers/controller_691.pth saved with loss: 4.48809814453125 +average_normalized/inverse_squared/controllers/controller_692.pth saved with loss: 4.488029956817627 +average_normalized/inverse_squared/controllers/controller_693.pth saved with loss: 4.487961769104004 +average_normalized/inverse_squared/controllers/controller_694.pth saved with loss: 4.487893581390381 +average_normalized/inverse_squared/controllers/controller_695.pth saved with loss: 4.487825870513916 +average_normalized/inverse_squared/controllers/controller_696.pth saved with loss: 4.487757682800293 +average_normalized/inverse_squared/controllers/controller_697.pth saved with loss: 4.487689971923828 +average_normalized/inverse_squared/controllers/controller_698.pth saved with loss: 4.4876227378845215 +average_normalized/inverse_squared/controllers/controller_699.pth saved with loss: 4.487557411193848 +average_normalized/inverse_squared/controllers/controller_700.pth saved with loss: 4.487490653991699 +average_normalized/inverse_squared/controllers/controller_701.pth saved with loss: 4.487423896789551 +average_normalized/inverse_squared/controllers/controller_702.pth saved with loss: 4.487358570098877 +average_normalized/inverse_squared/controllers/controller_703.pth saved with loss: 4.487292766571045 +average_normalized/inverse_squared/controllers/controller_704.pth saved with loss: 4.487227439880371 +average_normalized/inverse_squared/controllers/controller_705.pth saved with loss: 4.487162113189697 +average_normalized/inverse_squared/controllers/controller_706.pth saved with loss: 4.487096786499023 +average_normalized/inverse_squared/controllers/controller_707.pth saved with loss: 4.48703145980835 +average_normalized/inverse_squared/controllers/controller_708.pth saved with loss: 4.486966133117676 +average_normalized/inverse_squared/controllers/controller_709.pth saved with loss: 4.4868998527526855 +average_normalized/inverse_squared/controllers/controller_710.pth saved with loss: 4.486833572387695 +average_normalized/inverse_squared/controllers/controller_711.pth saved with loss: 4.486767768859863 +average_normalized/inverse_squared/controllers/controller_712.pth saved with loss: 4.486701488494873 +average_normalized/inverse_squared/controllers/controller_713.pth saved with loss: 4.486634731292725 +average_normalized/inverse_squared/controllers/controller_714.pth saved with loss: 4.486567974090576 +average_normalized/inverse_squared/controllers/controller_715.pth saved with loss: 4.486501693725586 +average_normalized/inverse_squared/controllers/controller_716.pth saved with loss: 4.486433982849121 +average_normalized/inverse_squared/controllers/controller_717.pth saved with loss: 4.4863667488098145 +average_normalized/inverse_squared/controllers/controller_718.pth saved with loss: 4.486299514770508 +average_normalized/inverse_squared/controllers/controller_719.pth saved with loss: 4.486231327056885 +average_normalized/inverse_squared/controllers/controller_720.pth saved with loss: 4.486163139343262 +average_normalized/inverse_squared/controllers/controller_721.pth saved with loss: 4.486096382141113 +average_normalized/inverse_squared/controllers/controller_722.pth saved with loss: 4.486027717590332 +average_normalized/inverse_squared/controllers/controller_723.pth saved with loss: 4.485958576202393 +average_normalized/inverse_squared/controllers/controller_724.pth saved with loss: 4.485890865325928 +average_normalized/inverse_squared/controllers/controller_725.pth saved with loss: 4.485822677612305 +average_normalized/inverse_squared/controllers/controller_726.pth saved with loss: 4.485753536224365 +average_normalized/inverse_squared/controllers/controller_727.pth saved with loss: 4.485684871673584 +average_normalized/inverse_squared/controllers/controller_728.pth saved with loss: 4.485615253448486 +average_normalized/inverse_squared/controllers/controller_729.pth saved with loss: 4.485546112060547 +average_normalized/inverse_squared/controllers/controller_730.pth saved with loss: 4.485476970672607 +average_normalized/inverse_squared/controllers/controller_731.pth saved with loss: 4.485407829284668 +average_normalized/inverse_squared/controllers/controller_732.pth saved with loss: 4.4853386878967285 +average_normalized/inverse_squared/controllers/controller_733.pth saved with loss: 4.485268592834473 +average_normalized/inverse_squared/controllers/controller_734.pth saved with loss: 4.485199451446533 +average_normalized/inverse_squared/controllers/controller_735.pth saved with loss: 4.4851298332214355 +average_normalized/inverse_squared/controllers/controller_736.pth saved with loss: 4.485060691833496 +average_normalized/inverse_squared/controllers/controller_737.pth saved with loss: 4.484994411468506 +average_normalized/inverse_squared/controllers/controller_738.pth saved with loss: 4.48492956161499 +average_normalized/inverse_squared/controllers/controller_739.pth saved with loss: 4.484865665435791 +average_normalized/inverse_squared/controllers/controller_740.pth saved with loss: 4.484802722930908 +average_normalized/inverse_squared/controllers/controller_741.pth saved with loss: 4.484740257263184 +average_normalized/inverse_squared/controllers/controller_742.pth saved with loss: 4.484678268432617 +average_normalized/inverse_squared/controllers/controller_743.pth saved with loss: 4.484616279602051 +average_normalized/inverse_squared/controllers/controller_744.pth saved with loss: 4.484555244445801 +average_normalized/inverse_squared/controllers/controller_745.pth saved with loss: 4.484492778778076 +average_normalized/inverse_squared/controllers/controller_746.pth saved with loss: 4.484431266784668 +average_normalized/inverse_squared/controllers/controller_747.pth saved with loss: 4.484369277954102 +average_normalized/inverse_squared/controllers/controller_748.pth saved with loss: 4.484306812286377 +average_normalized/inverse_squared/controllers/controller_749.pth saved with loss: 4.484243869781494 +average_normalized/inverse_squared/controllers/controller_750.pth saved with loss: 4.4841814041137695 +average_normalized/inverse_squared/controllers/controller_751.pth saved with loss: 4.484118461608887 +average_normalized/inverse_squared/controllers/controller_752.pth saved with loss: 4.484055042266846 +average_normalized/inverse_squared/controllers/controller_753.pth saved with loss: 4.483991622924805 +average_normalized/inverse_squared/controllers/controller_754.pth saved with loss: 4.483928203582764 +average_normalized/inverse_squared/controllers/controller_755.pth saved with loss: 4.483865261077881 +average_normalized/inverse_squared/controllers/controller_756.pth saved with loss: 4.483801364898682 +average_normalized/inverse_squared/controllers/controller_757.pth saved with loss: 4.483737945556641 +average_normalized/inverse_squared/controllers/controller_758.pth saved with loss: 4.4836745262146 +average_normalized/inverse_squared/controllers/controller_759.pth saved with loss: 4.483611106872559 +average_normalized/inverse_squared/controllers/controller_760.pth saved with loss: 4.483547687530518 +average_normalized/inverse_squared/controllers/controller_761.pth saved with loss: 4.483484745025635 +average_normalized/inverse_squared/controllers/controller_762.pth saved with loss: 4.483421325683594 +average_normalized/inverse_squared/controllers/controller_763.pth saved with loss: 4.483358860015869 +average_normalized/inverse_squared/controllers/controller_764.pth saved with loss: 4.48329496383667 +average_normalized/inverse_squared/controllers/controller_765.pth saved with loss: 4.483232021331787 +average_normalized/inverse_squared/controllers/controller_766.pth saved with loss: 4.483169078826904 +average_normalized/inverse_squared/controllers/controller_767.pth saved with loss: 4.483105659484863 +average_normalized/inverse_squared/controllers/controller_768.pth saved with loss: 4.483042240142822 +average_normalized/inverse_squared/controllers/controller_769.pth saved with loss: 4.4829792976379395 +average_normalized/inverse_squared/controllers/controller_770.pth saved with loss: 4.482916355133057 +average_normalized/inverse_squared/controllers/controller_771.pth saved with loss: 4.482852935791016 +average_normalized/inverse_squared/controllers/controller_772.pth saved with loss: 4.482789993286133 +average_normalized/inverse_squared/controllers/controller_773.pth saved with loss: 4.482726573944092 +average_normalized/inverse_squared/controllers/controller_774.pth saved with loss: 4.482663154602051 +average_normalized/inverse_squared/controllers/controller_775.pth saved with loss: 4.482599258422852 +average_normalized/inverse_squared/controllers/controller_776.pth saved with loss: 4.482536315917969 +average_normalized/inverse_squared/controllers/controller_777.pth saved with loss: 4.4824724197387695 +average_normalized/inverse_squared/controllers/controller_778.pth saved with loss: 4.4824090003967285 +average_normalized/inverse_squared/controllers/controller_779.pth saved with loss: 4.482345104217529 +average_normalized/inverse_squared/controllers/controller_780.pth saved with loss: 4.482281684875488 +average_normalized/inverse_squared/controllers/controller_781.pth saved with loss: 4.482217788696289 +average_normalized/inverse_squared/controllers/controller_782.pth saved with loss: 4.482153415679932 +average_normalized/inverse_squared/controllers/controller_783.pth saved with loss: 4.482089519500732 +average_normalized/inverse_squared/controllers/controller_784.pth saved with loss: 4.482025623321533 +average_normalized/inverse_squared/controllers/controller_785.pth saved with loss: 4.481961727142334 +average_normalized/inverse_squared/controllers/controller_786.pth saved with loss: 4.481897830963135 +average_normalized/inverse_squared/controllers/controller_787.pth saved with loss: 4.4818339347839355 +average_normalized/inverse_squared/controllers/controller_788.pth saved with loss: 4.481770038604736 +average_normalized/inverse_squared/controllers/controller_789.pth saved with loss: 4.481706142425537 +average_normalized/inverse_squared/controllers/controller_790.pth saved with loss: 4.481642246246338 +average_normalized/inverse_squared/controllers/controller_791.pth saved with loss: 4.481578350067139 +average_normalized/inverse_squared/controllers/controller_792.pth saved with loss: 4.481513977050781 +average_normalized/inverse_squared/controllers/controller_793.pth saved with loss: 4.481450080871582 +average_normalized/inverse_squared/controllers/controller_794.pth saved with loss: 4.481386184692383 +average_normalized/inverse_squared/controllers/controller_795.pth saved with loss: 4.481322765350342 +average_normalized/inverse_squared/controllers/controller_796.pth saved with loss: 4.481258392333984 +average_normalized/inverse_squared/controllers/controller_797.pth saved with loss: 4.481194019317627 +average_normalized/inverse_squared/controllers/controller_798.pth saved with loss: 4.481130599975586 +average_normalized/inverse_squared/controllers/controller_799.pth saved with loss: 4.4810662269592285 +average_normalized/inverse_squared/controllers/controller_800.pth saved with loss: 4.481001377105713 +average_normalized/inverse_squared/controllers/controller_801.pth saved with loss: 4.480937957763672 +average_normalized/inverse_squared/controllers/controller_802.pth saved with loss: 4.4808735847473145 +average_normalized/inverse_squared/controllers/controller_803.pth saved with loss: 4.480809688568115 +average_normalized/inverse_squared/controllers/controller_804.pth saved with loss: 4.4807448387146 +average_normalized/inverse_squared/controllers/controller_805.pth saved with loss: 4.4806809425354 +average_normalized/inverse_squared/controllers/controller_806.pth saved with loss: 4.480616569519043 +average_normalized/inverse_squared/controllers/controller_807.pth saved with loss: 4.4805521965026855 +average_normalized/inverse_squared/controllers/controller_808.pth saved with loss: 4.480487823486328 +average_normalized/inverse_squared/controllers/controller_809.pth saved with loss: 4.480423450469971 +average_normalized/inverse_squared/controllers/controller_810.pth saved with loss: 4.480358600616455 +average_normalized/inverse_squared/controllers/controller_811.pth saved with loss: 4.480294227600098 +average_normalized/inverse_squared/controllers/controller_812.pth saved with loss: 4.48022985458374 +average_normalized/inverse_squared/controllers/controller_813.pth saved with loss: 4.480165004730225 +average_normalized/inverse_squared/controllers/controller_814.pth saved with loss: 4.480099678039551 +average_normalized/inverse_squared/controllers/controller_815.pth saved with loss: 4.480034351348877 +average_normalized/inverse_squared/controllers/controller_816.pth saved with loss: 4.479968547821045 +average_normalized/inverse_squared/controllers/controller_817.pth saved with loss: 4.479902744293213 +average_normalized/inverse_squared/controllers/controller_818.pth saved with loss: 4.479836463928223 +average_normalized/inverse_squared/controllers/controller_819.pth saved with loss: 4.479771137237549 +average_normalized/inverse_squared/controllers/controller_820.pth saved with loss: 4.479704856872559 +average_normalized/inverse_squared/controllers/controller_821.pth saved with loss: 4.479638576507568 +average_normalized/inverse_squared/controllers/controller_822.pth saved with loss: 4.47957181930542 +average_normalized/inverse_squared/controllers/controller_823.pth saved with loss: 4.47950553894043 +average_normalized/inverse_squared/controllers/controller_824.pth saved with loss: 4.479438781738281 +average_normalized/inverse_squared/controllers/controller_825.pth saved with loss: 4.479372024536133 +average_normalized/inverse_squared/controllers/controller_826.pth saved with loss: 4.479305267333984 +average_normalized/inverse_squared/controllers/controller_827.pth saved with loss: 4.479238510131836 +average_normalized/inverse_squared/controllers/controller_828.pth saved with loss: 4.479171276092529 +average_normalized/inverse_squared/controllers/controller_829.pth saved with loss: 4.4791035652160645 +average_normalized/inverse_squared/controllers/controller_830.pth saved with loss: 4.479036808013916 +average_normalized/inverse_squared/controllers/controller_831.pth saved with loss: 4.478969573974609 +average_normalized/inverse_squared/controllers/controller_832.pth saved with loss: 4.4789018630981445 +average_normalized/inverse_squared/controllers/controller_833.pth saved with loss: 4.478835105895996 +average_normalized/inverse_squared/controllers/controller_834.pth saved with loss: 4.478767395019531 +average_normalized/inverse_squared/controllers/controller_835.pth saved with loss: 4.478700637817383 +average_normalized/inverse_squared/controllers/controller_836.pth saved with loss: 4.478632926940918 +average_normalized/inverse_squared/controllers/controller_837.pth saved with loss: 4.478565216064453 +average_normalized/inverse_squared/controllers/controller_838.pth saved with loss: 4.4784979820251465 +average_normalized/inverse_squared/controllers/controller_839.pth saved with loss: 4.478430271148682 +average_normalized/inverse_squared/controllers/controller_840.pth saved with loss: 4.478362560272217 +average_normalized/inverse_squared/controllers/controller_841.pth saved with loss: 4.478294849395752 +average_normalized/inverse_squared/controllers/controller_842.pth saved with loss: 4.478226661682129 +average_normalized/inverse_squared/controllers/controller_843.pth saved with loss: 4.478158950805664 +average_normalized/inverse_squared/controllers/controller_844.pth saved with loss: 4.478091239929199 +average_normalized/inverse_squared/controllers/controller_845.pth saved with loss: 4.478022575378418 +average_normalized/inverse_squared/controllers/controller_846.pth saved with loss: 4.477955341339111 +average_normalized/inverse_squared/controllers/controller_847.pth saved with loss: 4.477887153625488 +average_normalized/inverse_squared/controllers/controller_848.pth saved with loss: 4.477819442749023 +average_normalized/inverse_squared/controllers/controller_849.pth saved with loss: 4.4777512550354 +average_normalized/inverse_squared/controllers/controller_850.pth saved with loss: 4.477683067321777 +average_normalized/inverse_squared/controllers/controller_851.pth saved with loss: 4.4776153564453125 +average_normalized/inverse_squared/controllers/controller_852.pth saved with loss: 4.477546691894531 +average_normalized/inverse_squared/controllers/controller_853.pth saved with loss: 4.477478504180908 +average_normalized/inverse_squared/controllers/controller_854.pth saved with loss: 4.477409839630127 +average_normalized/inverse_squared/controllers/controller_855.pth saved with loss: 4.477341651916504 +average_normalized/inverse_squared/controllers/controller_856.pth saved with loss: 4.477272987365723 +average_normalized/inverse_squared/controllers/controller_857.pth saved with loss: 4.477204322814941 +average_normalized/inverse_squared/controllers/controller_858.pth saved with loss: 4.47713565826416 +average_normalized/inverse_squared/controllers/controller_859.pth saved with loss: 4.477067470550537 +average_normalized/inverse_squared/controllers/controller_860.pth saved with loss: 4.476998805999756 +average_normalized/inverse_squared/controllers/controller_861.pth saved with loss: 4.476930141448975 +average_normalized/inverse_squared/controllers/controller_862.pth saved with loss: 4.476861000061035 +average_normalized/inverse_squared/controllers/controller_863.pth saved with loss: 4.476792812347412 +average_normalized/inverse_squared/controllers/controller_864.pth saved with loss: 4.476723670959473 +average_normalized/inverse_squared/controllers/controller_865.pth saved with loss: 4.476655006408691 +average_normalized/inverse_squared/controllers/controller_866.pth saved with loss: 4.476585865020752 +average_normalized/inverse_squared/controllers/controller_867.pth saved with loss: 4.476517200469971 +average_normalized/inverse_squared/controllers/controller_868.pth saved with loss: 4.476449012756348 +average_normalized/inverse_squared/controllers/controller_869.pth saved with loss: 4.476378917694092 +average_normalized/inverse_squared/controllers/controller_870.pth saved with loss: 4.476309776306152 +average_normalized/inverse_squared/controllers/controller_871.pth saved with loss: 4.476241111755371 +average_normalized/inverse_squared/controllers/controller_872.pth saved with loss: 4.476171970367432 +average_normalized/inverse_squared/controllers/controller_873.pth saved with loss: 4.47610330581665 +average_normalized/inverse_squared/controllers/controller_874.pth saved with loss: 4.476034164428711 +average_normalized/inverse_squared/controllers/controller_875.pth saved with loss: 4.475964546203613 +average_normalized/inverse_squared/controllers/controller_876.pth saved with loss: 4.475895404815674 +average_normalized/inverse_squared/controllers/controller_877.pth saved with loss: 4.475825786590576 +average_normalized/inverse_squared/controllers/controller_878.pth saved with loss: 4.475756645202637 +average_normalized/inverse_squared/controllers/controller_879.pth saved with loss: 4.475687503814697 +average_normalized/inverse_squared/controllers/controller_880.pth saved with loss: 4.4756178855896 +average_normalized/inverse_squared/controllers/controller_881.pth saved with loss: 4.475549221038818 +average_normalized/inverse_squared/controllers/controller_882.pth saved with loss: 4.475479602813721 +average_normalized/inverse_squared/controllers/controller_883.pth saved with loss: 4.475409984588623 +average_normalized/inverse_squared/controllers/controller_884.pth saved with loss: 4.475341320037842 +average_normalized/inverse_squared/controllers/controller_885.pth saved with loss: 4.475271701812744 +average_normalized/inverse_squared/controllers/controller_886.pth saved with loss: 4.4752020835876465 +average_normalized/inverse_squared/controllers/controller_887.pth saved with loss: 4.475131988525391 +average_normalized/inverse_squared/controllers/controller_888.pth saved with loss: 4.475062370300293 +average_normalized/inverse_squared/controllers/controller_889.pth saved with loss: 4.4749932289123535 +average_normalized/inverse_squared/controllers/controller_890.pth saved with loss: 4.474924087524414 +average_normalized/inverse_squared/controllers/controller_891.pth saved with loss: 4.474853515625 +average_normalized/inverse_squared/controllers/controller_892.pth saved with loss: 4.4747843742370605 +average_normalized/inverse_squared/controllers/controller_893.pth saved with loss: 4.474715232849121 +average_normalized/inverse_squared/controllers/controller_894.pth saved with loss: 4.474645614624023 +average_normalized/inverse_squared/controllers/controller_895.pth saved with loss: 4.474575519561768 +average_normalized/inverse_squared/controllers/controller_896.pth saved with loss: 4.47450590133667 +average_normalized/inverse_squared/controllers/controller_897.pth saved with loss: 4.474436283111572 +average_normalized/inverse_squared/controllers/controller_898.pth saved with loss: 4.474366188049316 +average_normalized/inverse_squared/controllers/controller_899.pth saved with loss: 4.474296569824219 +average_normalized/inverse_squared/controllers/controller_900.pth saved with loss: 4.474226474761963 +average_normalized/inverse_squared/controllers/controller_901.pth saved with loss: 4.474156379699707 +average_normalized/inverse_squared/controllers/controller_902.pth saved with loss: 4.474086761474609 +average_normalized/inverse_squared/controllers/controller_903.pth saved with loss: 4.474017143249512 +average_normalized/inverse_squared/controllers/controller_904.pth saved with loss: 4.473945617675781 +average_normalized/inverse_squared/controllers/controller_905.pth saved with loss: 4.473875522613525 +average_normalized/inverse_squared/controllers/controller_906.pth saved with loss: 4.473804473876953 +average_normalized/inverse_squared/controllers/controller_907.pth saved with loss: 4.473733901977539 +average_normalized/inverse_squared/controllers/controller_908.pth saved with loss: 4.473662853240967 +average_normalized/inverse_squared/controllers/controller_909.pth saved with loss: 4.4735918045043945 +average_normalized/inverse_squared/controllers/controller_910.pth saved with loss: 4.473520755767822 +average_normalized/inverse_squared/controllers/controller_911.pth saved with loss: 4.47344970703125 +average_normalized/inverse_squared/controllers/controller_912.pth saved with loss: 4.4733781814575195 +average_normalized/inverse_squared/controllers/controller_913.pth saved with loss: 4.473306655883789 +average_normalized/inverse_squared/controllers/controller_914.pth saved with loss: 4.473235607147217 +average_normalized/inverse_squared/controllers/controller_915.pth saved with loss: 4.4731645584106445 +average_normalized/inverse_squared/controllers/controller_916.pth saved with loss: 4.473092555999756 +average_normalized/inverse_squared/controllers/controller_917.pth saved with loss: 4.473021507263184 +average_normalized/inverse_squared/controllers/controller_918.pth saved with loss: 4.472950458526611 +average_normalized/inverse_squared/controllers/controller_919.pth saved with loss: 4.472878456115723 +average_normalized/inverse_squared/controllers/controller_920.pth saved with loss: 4.472806930541992 +average_normalized/inverse_squared/controllers/controller_921.pth saved with loss: 4.472735404968262 +average_normalized/inverse_squared/controllers/controller_922.pth saved with loss: 4.472663879394531 +average_normalized/inverse_squared/controllers/controller_923.pth saved with loss: 4.472591400146484 +average_normalized/inverse_squared/controllers/controller_924.pth saved with loss: 4.472519397735596 +average_normalized/inverse_squared/controllers/controller_925.pth saved with loss: 4.472448348999023 +average_normalized/inverse_squared/controllers/controller_926.pth saved with loss: 4.472375869750977 +average_normalized/inverse_squared/controllers/controller_927.pth saved with loss: 4.47230339050293 +average_normalized/inverse_squared/controllers/controller_928.pth saved with loss: 4.472231388092041 +average_normalized/inverse_squared/controllers/controller_929.pth saved with loss: 4.472158432006836 +average_normalized/inverse_squared/controllers/controller_930.pth saved with loss: 4.472086429595947 +average_normalized/inverse_squared/controllers/controller_931.pth saved with loss: 4.472013473510742 +average_normalized/inverse_squared/controllers/controller_932.pth saved with loss: 4.471940994262695 +average_normalized/inverse_squared/controllers/controller_933.pth saved with loss: 4.471868991851807 +average_normalized/inverse_squared/controllers/controller_934.pth saved with loss: 4.47179651260376 +average_normalized/inverse_squared/controllers/controller_935.pth saved with loss: 4.471723556518555 +average_normalized/inverse_squared/controllers/controller_936.pth saved with loss: 4.47165060043335 +average_normalized/inverse_squared/controllers/controller_937.pth saved with loss: 4.471578121185303 +average_normalized/inverse_squared/controllers/controller_938.pth saved with loss: 4.471505641937256 +average_normalized/inverse_squared/controllers/controller_939.pth saved with loss: 4.471432685852051 +average_normalized/inverse_squared/controllers/controller_940.pth saved with loss: 4.471360206604004 +average_normalized/inverse_squared/controllers/controller_941.pth saved with loss: 4.471286773681641 +average_normalized/inverse_squared/controllers/controller_942.pth saved with loss: 4.471214294433594 +average_normalized/inverse_squared/controllers/controller_943.pth saved with loss: 4.4711408615112305 +average_normalized/inverse_squared/controllers/controller_944.pth saved with loss: 4.471068382263184 +average_normalized/inverse_squared/controllers/controller_945.pth saved with loss: 4.47099494934082 +average_normalized/inverse_squared/controllers/controller_946.pth saved with loss: 4.470921993255615 +average_normalized/inverse_squared/controllers/controller_947.pth saved with loss: 4.470848560333252 +average_normalized/inverse_squared/controllers/controller_948.pth saved with loss: 4.4707746505737305 +average_normalized/inverse_squared/controllers/controller_949.pth saved with loss: 4.470701694488525 +average_normalized/inverse_squared/controllers/controller_950.pth saved with loss: 4.47062873840332 +average_normalized/inverse_squared/controllers/controller_951.pth saved with loss: 4.470555305480957 +average_normalized/inverse_squared/controllers/controller_952.pth saved with loss: 4.4704813957214355 +average_normalized/inverse_squared/controllers/controller_953.pth saved with loss: 4.470407962799072 +average_normalized/inverse_squared/controllers/controller_954.pth saved with loss: 4.470334529876709 +average_normalized/inverse_squared/controllers/controller_955.pth saved with loss: 4.4702606201171875 +average_normalized/inverse_squared/controllers/controller_956.pth saved with loss: 4.470187187194824 +average_normalized/inverse_squared/controllers/controller_957.pth saved with loss: 4.470113754272461 +average_normalized/inverse_squared/controllers/controller_958.pth saved with loss: 4.4700398445129395 +average_normalized/inverse_squared/controllers/controller_959.pth saved with loss: 4.46996545791626 +average_normalized/inverse_squared/controllers/controller_960.pth saved with loss: 4.4698920249938965 +average_normalized/inverse_squared/controllers/controller_961.pth saved with loss: 4.469819068908691 +average_normalized/inverse_squared/controllers/controller_962.pth saved with loss: 4.4697442054748535 +average_normalized/inverse_squared/controllers/controller_963.pth saved with loss: 4.469670295715332 +average_normalized/inverse_squared/controllers/controller_964.pth saved with loss: 4.4695963859558105 +average_normalized/inverse_squared/controllers/controller_965.pth saved with loss: 4.469522476196289 +average_normalized/inverse_squared/controllers/controller_966.pth saved with loss: 4.469448089599609 +average_normalized/inverse_squared/controllers/controller_967.pth saved with loss: 4.46937370300293 +average_normalized/inverse_squared/controllers/controller_968.pth saved with loss: 4.469299793243408 +average_normalized/inverse_squared/controllers/controller_969.pth saved with loss: 4.46922492980957 +average_normalized/inverse_squared/controllers/controller_970.pth saved with loss: 4.469151496887207 +average_normalized/inverse_squared/controllers/controller_971.pth saved with loss: 4.469076156616211 +average_normalized/inverse_squared/controllers/controller_972.pth saved with loss: 4.469001770019531 +average_normalized/inverse_squared/controllers/controller_973.pth saved with loss: 4.468927383422852 +average_normalized/inverse_squared/controllers/controller_974.pth saved with loss: 4.4688520431518555 +average_normalized/inverse_squared/controllers/controller_975.pth saved with loss: 4.468777179718018 +average_normalized/inverse_squared/controllers/controller_976.pth saved with loss: 4.4687018394470215 +average_normalized/inverse_squared/controllers/controller_977.pth saved with loss: 4.468626499176025 +average_normalized/inverse_squared/controllers/controller_978.pth saved with loss: 4.468551158905029 +average_normalized/inverse_squared/controllers/controller_979.pth saved with loss: 4.468475818634033 +average_normalized/inverse_squared/controllers/controller_980.pth saved with loss: 4.468400001525879 +average_normalized/inverse_squared/controllers/controller_981.pth saved with loss: 4.468324184417725 +average_normalized/inverse_squared/controllers/controller_982.pth saved with loss: 4.46824836730957 +average_normalized/inverse_squared/controllers/controller_983.pth saved with loss: 4.468173503875732 +average_normalized/inverse_squared/controllers/controller_984.pth saved with loss: 4.468097686767578 +average_normalized/inverse_squared/controllers/controller_985.pth saved with loss: 4.468020915985107 +average_normalized/inverse_squared/controllers/controller_986.pth saved with loss: 4.4679460525512695 +average_normalized/inverse_squared/controllers/controller_987.pth saved with loss: 4.467870235443115 +average_normalized/inverse_squared/controllers/controller_988.pth saved with loss: 4.467795372009277 +average_normalized/inverse_squared/controllers/controller_989.pth saved with loss: 4.467719554901123 +average_normalized/inverse_squared/controllers/controller_990.pth saved with loss: 4.467644214630127 +average_normalized/inverse_squared/controllers/controller_991.pth saved with loss: 4.467568397521973 +average_normalized/inverse_squared/controllers/controller_992.pth saved with loss: 4.46749210357666 +average_normalized/inverse_squared/controllers/controller_993.pth saved with loss: 4.4674153327941895 +average_normalized/inverse_squared/controllers/controller_994.pth saved with loss: 4.4673380851745605 +average_normalized/inverse_squared/controllers/controller_995.pth saved with loss: 4.467259883880615 +average_normalized/inverse_squared/controllers/controller_996.pth saved with loss: 4.46718168258667 +average_normalized/inverse_squared/controllers/controller_997.pth saved with loss: 4.467103481292725 +average_normalized/inverse_squared/controllers/controller_998.pth saved with loss: 4.467024326324463 +average_normalized/inverse_squared/controllers/controller_999.pth saved with loss: 4.466945171356201 +average_normalized/inverse_squared/controllers/controller_1000.pth saved with loss: 4.4668660163879395 +Training complete. Models and logs are saved under respective directories for each loss function.