def trainer(hyperp, run_options, file_paths): #=== GPU Settings ===# os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" os.environ["CUDA_VISIBLE_DEVICES"] = run_options.which_gpu #=== Load Data ===# obs_indices, parameter_train, state_obs_train,\ parameter_test, state_obs_test,\ data_input_shape_temp, parameter_dimension\ = load_thermal_fin_data(file_paths, run_options.num_data_train, run_options.num_data_test, run_options.parameter_dimensions) output_dimensions_temp = len(obs_indices) #=== Forward or Inverse Mapping Input and Output Dimensions ===# if run_options.forward_mapping == 1: data_input_shape = data_input_shape_temp output_dimensions = output_dimensions_temp if run_options.inverse_mapping == 1: data_input_shape = np.array([output_dimensions_temp, 1]) output_dimensions = data_input_shape_temp[0] #=== Construct Validation Set and Batches ===# if run_options.forward_mapping == 1: parameter_and_state_obs_train, parameter_and_state_obs_val, parameter_and_state_obs_test,\ run_options.num_data_train, num_data_val, run_options.num_data_test,\ num_batches_train, num_batches_val, num_batches_test\ = form_train_val_test_batches(parameter_train, state_obs_train, parameter_test, state_obs_test, hyperp.batch_size, run_options.random_seed) if run_options.inverse_mapping == 1: parameter_and_state_obs_train, parameter_and_state_obs_val, parameter_and_state_obs_test,\ run_options.num_data_train, num_data_val, run_options.num_data_test,\ num_batches_train, num_batches_val, num_batches_test\ = form_train_val_test_batches(state_obs_train, parameter_train, state_obs_test, parameter_test, hyperp.batch_size, run_options.random_seed) #=== Neural network ===# if run_options.use_L1 == 0: kernel_regularizer = None bias_regularizer = None else: kernel_regularizer = tf.keras.regularizers.l1(hyperp.regularization) bias_regularizer = tf.keras.regularizers.l1(hyperp.regularization) NN = FCLayerwise(hyperp, run_options, data_input_shape, output_dimensions, kernel_regularizer, bias_regularizer) #=== Training ===# optimize(hyperp, run_options, file_paths, NN, data_loss_regression, relative_error, parameter_and_state_obs_train, parameter_and_state_obs_val, parameter_and_state_obs_test, output_dimensions, num_batches_train)
def trainer(hyperp, run_options, file_paths): #=== GPU Settings ===# os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" os.environ["CUDA_VISIBLE_DEVICES"] = run_options.which_gpu #=== Load Data ===# data_train, labels_train,\ data_test, labels_test,\ data_input_shape, num_channels, label_dimensions\ = load_data(file_paths.NN_type, file_paths.dataset, run_options.random_seed) #=== Construct Validation Set and Batches ===# data_and_labels_train, data_and_labels_val, data_and_labels_test,\ num_data_train, num_data_val, num_data_test,\ num_batches_train, num_batches_val, num_batches_test\ = form_train_val_test_batches(data_train, labels_train, \ data_test, labels_test, \ hyperp.batch_size, run_options.random_seed) #=== Neural network ===# NN = CNNLayerwise(hyperp, run_options, data_input_shape, label_dimensions, num_channels, None, None) #=== Training ===# optimize_ADMM(hyperp, run_options, file_paths, NN, data_loss_classification, accuracy_classification, data_and_labels_train, data_and_labels_val, data_and_labels_test, label_dimensions, num_batches_train)
def trainer(hyperp, run_options, file_paths): #=== GPU Settings ===# os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" os.environ["CUDA_VISIBLE_DEVICES"] = run_options.which_gpu #=== Load Data ===# data_train, labels_train,\ data_test, labels_test,\ data_input_shape, num_channels, label_dimensions\ = load_data(file_paths.NN_type, file_paths.dataset, run_options.random_seed) #=== Construct Validation Set and Batches ===# data_and_labels_train, data_and_labels_val, data_and_labels_test,\ num_data_train, num_data_val, num_data_test,\ num_batches_train, num_batches_val, num_batches_test\ = form_train_val_test_batches(data_train, labels_train, \ data_test, labels_test, \ hyperp.batch_size, run_options.random_seed) #=== Neural network ===# if run_options.use_L1 == 0 and run_options.use_L2 == 0: kernel_regularizer = None bias_regularizer = None if run_options.use_L1 == 1: kernel_regularizer = tf.keras.regularizers.l1(hyperp.regularization) bias_regularizer = tf.keras.regularizers.l1(hyperp.regularization) if run_options.use_L2 == 1: kernel_regularizer = tf.keras.regularizers.l2(hyperp.regularization) bias_regularizer = tf.keras.regularizers.l2(hyperp.regularization) NN = CNNLayerwise(hyperp, run_options, data_input_shape, label_dimensions, num_channels, kernel_regularizer, bias_regularizer) #=== Training ===# optimize(hyperp, run_options, file_paths, NN, data_loss_classification, accuracy_classification, data_and_labels_train, data_and_labels_val, data_and_labels_test, label_dimensions, num_batches_train)
def trainer(hyperp, run_options, file_paths): #=== GPU Settings ===# Must put this first! Because TF2 will automatically work on a GPU and it may clash with used ones if the visible device list is not yet specified os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" if run_options.use_distributed_training == 0: os.environ["CUDA_VISIBLE_DEVICES"] = run_options.which_gpu GLOBAL_BATCH_SIZE = hyperp.batch_size if run_options.use_distributed_training == 1: os.environ["CUDA_VISIBLE_DEVICES"] = run_options.dist_which_gpus gpus = tf.config.experimental.list_physical_devices('GPU') GLOBAL_BATCH_SIZE = hyperp.batch_size * len( gpus ) # To avoid the core dump issue, have to do this instead of hyperp.batch_size * dist_strategy.num_replicas_in_sync #=== Load Data ===# obs_indices, parameter_train, state_obs_train,\ parameter_test, state_obs_test,\ data_input_shape, parameter_dimension\ = load_thermal_fin_data(file_paths, run_options.num_data_train, run_options.num_data_test, run_options.parameter_dimensions) #=== Construct Validation Set and Batches ===# parameter_and_state_obs_train, parameter_and_state_obs_val, parameter_and_state_obs_test,\ run_options.num_data_train, num_data_val, run_options.num_data_test,\ num_batches_train, num_batches_val, num_batches_test\ = form_train_val_test_batches(parameter_train, state_obs_train, parameter_test, state_obs_test, GLOBAL_BATCH_SIZE, run_options.random_seed) #=== Data and Latent Dimensions of Autoencoder ===# data_dimension = parameter_dimension if hyperp.data_type == 'full': latent_dimension = run_options.full_domain_dimensions if hyperp.data_type == 'bnd': latent_dimension = len(obs_indices) #=== Non-distributed Training ===# if run_options.use_distributed_training == 0: #=== Neural Network ===# NN = AutoencoderFwdInv(hyperp, data_dimension, latent_dimension) #=== Training ===# storage_array_loss_train, storage_array_loss_train_autoencoder, storage_array_loss_train_forward_problem, storage_array_loss_train_model_augmented,\ storage_array_loss_val, storage_array_loss_val_autoencoder, storage_array_loss_val_forward_problem, storage_array_loss_val_model_augmented,\ storage_array_loss_test, storage_array_loss_test_autoencoder, storage_array_loss_test_forward_problem, storage_array_loss_test_model_augmented,\ storage_array_relative_error_parameter_autoencoder, storage_array_relative_error_state_obs, storage_array_relative_error_parameter_inverse_problem\ = optimize(hyperp, run_options, file_paths, NN, obs_indices, loss_autoencoder, loss_encoder, loss_model_augmented, relative_error,\ parameter_and_state_obs_train, parameter_and_state_obs_val, parameter_and_state_obs_test,\ parameter_dimension, num_batches_train) #=== Distributed Training ===# if run_options.use_distributed_training == 1: dist_strategy = tf.distribute.MirroredStrategy() with dist_strategy.scope(): #=== Neural Network ===# NN = AutoencoderFwdInv(hyperp, data_dimension, latent_dimension) #=== Training ===# storage_array_loss_train, storage_array_loss_train_autoencoder, storage_array_loss_train_forward_problem, storage_array_loss_train_model_augmented,\ storage_array_loss_val, storage_array_loss_val_autoencoder, storage_array_loss_val_forward_problem, storage_array_loss_val_model_augmented,\ storage_array_loss_test, storage_array_loss_test_autoencoder, storage_array_loss_test_forward_problem, storage_array_loss_test_model_augmented,\ storage_array_relative_error_parameter_autoencoder, storage_array_relative_error_state_obs, storage_array_relative_error_parameter_inverse_problem\ = optimize_distributed(dist_strategy, GLOBAL_BATCH_SIZE, hyperp, run_options, file_paths, NN, obs_indices, loss_autoencoder, loss_model_augmented, relative_error,\ parameter_and_state_obs_train, parameter_and_state_obs_val, parameter_and_state_obs_test,\ parameter_dimension, num_batches_train) #=== Saving Metrics ===# metrics_dict = {} metrics_dict['loss_train'] = storage_array_loss_train metrics_dict[ 'loss_train_autoencoder'] = storage_array_loss_train_autoencoder metrics_dict[ 'loss_train_forward_problem'] = storage_array_loss_train_forward_problem metrics_dict[ 'loss_train_model_augmented'] = storage_array_loss_train_model_augmented metrics_dict['loss_val'] = storage_array_loss_val metrics_dict['loss_val_autoencoder'] = storage_array_loss_val_autoencoder metrics_dict[ 'loss_val_forward_problem'] = storage_array_loss_val_forward_problem metrics_dict[ 'loss_val_model_augmented'] = storage_array_loss_val_model_augmented metrics_dict[ 'relative_error_parameter_autoencoder'] = storage_array_relative_error_parameter_autoencoder metrics_dict[ 'relative_error_state_obs'] = storage_array_relative_error_state_obs metrics_dict[ 'relative_error_parameter_inverse_problem'] = storage_array_relative_error_parameter_inverse_problem df_metrics = pd.DataFrame(metrics_dict) df_metrics.to_csv(file_paths.NN_savefile_name + "_metrics" + '.csv', index=False)
def objective_functional(**hyperp_of_interest_objective_args_tuple): #=== Assign Hyperparameters of Interest ===# for key, val in hyperp_of_interest_objective_args_tuple.items(): setattr(hyperp, key, val) hyperp.truncation_layer = int(np.ceil(hyperp.num_hidden_layers / 2)) #=== Update File Paths with New Hyperparameters ===# file_paths = FilePaths(hyperp, run_options) #=== Construct Validation Set and Batches ===# if run_options.use_distributed_training == 0: GLOBAL_BATCH_SIZE = hyperp.batch_size if run_options.use_distributed_training == 1: GLOBAL_BATCH_SIZE = hyperp.batch_size * len( gpus ) # To avoid the core dump issue, have to do this instead of hyperp.batch_size * dist_strategy.num_replicas_in_sync parameter_and_state_obs_train, parameter_and_state_obs_val, parameter_and_state_obs_test,\ run_options.num_data_train, num_data_val, run_options.num_data_test,\ num_batches_train, num_batches_val, num_batches_test\ = form_train_val_test_batches(parameter_train, state_obs_train, parameter_test, state_obs_test, GLOBAL_BATCH_SIZE, run_options.random_seed) #=== Non-distributed Training ===# if run_options.use_distributed_training == 0: #=== Neural Network ===# NN = AutoencoderFwdInv(hyperp, parameter_dimension, run_options.full_domain_dimensions, obs_indices) #=== Training ===# storage_array_loss_train, storage_array_loss_train_autoencoder, storage_array_loss_train_forward_problem,\ storage_array_loss_val, storage_array_loss_val_autoencoder, storage_array_loss_val_forward_problem,\ storage_array_loss_test, storage_array_loss_test_autoencoder, storage_array_loss_test_forward_problem,\ storage_array_relative_error_parameter_autoencoder, storage_array_relative_error_parameter_inverse_problem, storage_array_relative_error_state_obs\ = optimize(hyperp, run_options, file_paths, NN, loss_autoencoder, loss_forward_problem, relative_error,\ parameter_and_state_obs_train, parameter_and_state_obs_val, parameter_and_state_obs_test,\ parameter_dimension, num_batches_train) #=== Distributed Training ===# if run_options.use_distributed_training == 1: dist_strategy = tf.distribute.MirroredStrategy() GLOBAL_BATCH_SIZE = hyperp.batch_size * dist_strategy.num_replicas_in_sync with dist_strategy.scope(): #=== Neural Network ===# NN = AutoencoderFwdInv(hyperp, parameter_dimension, run_options.full_domain_dimensions, obs_indices) #=== Training ===# storage_array_loss_train, storage_array_loss_train_autoencoder, storage_array_loss_train_forward_problem,\ storage_array_loss_val, storage_array_loss_val_autoencoder, storage_array_loss_val_forward_problem,\ storage_array_loss_test, storage_array_loss_test_autoencoder, storage_array_loss_test_forward_problem,\ storage_array_relative_error_parameter_autoencoder, storage_array_relative_error_parameter_inverse_problem, storage_array_relative_error_state_obs\ = optimize_distributed(dist_strategy, GLOBAL_BATCH_SIZE, hyperp, run_options, file_paths, NN, loss_autoencoder, loss_forward_problem, relative_error,\ parameter_and_state_obs_train, parameter_and_state_obs_val, parameter_and_state_obs_test,\ parameter_dimension, num_batches_train) #=== Saving Metrics ===# metrics_dict = {} metrics_dict['loss_train'] = storage_array_loss_train metrics_dict[ 'loss_train_autoencoder'] = storage_array_loss_train_autoencoder metrics_dict[ 'loss_train_forward_problem'] = storage_array_loss_train_forward_problem metrics_dict['loss_val'] = storage_array_loss_val metrics_dict[ 'loss_val_autoencoder'] = storage_array_loss_val_autoencoder metrics_dict[ 'loss_val_forward_problem'] = storage_array_loss_val_forward_problem metrics_dict[ 'relative_error_parameter_autoencoder'] = storage_array_relative_error_parameter_autoencoder metrics_dict[ 'relative_error_parameter_inverse_problem'] = storage_array_relative_error_parameter_inverse_problem metrics_dict[ 'relative_error_state_obs'] = storage_array_relative_error_state_obs df_metrics = pd.DataFrame(metrics_dict) df_metrics.to_csv(file_paths.NN_savefile_name + "_metrics" + '.csv', index=False) return storage_array_loss_val[-1]