166 void save(
const filesystem::path&)
const;
172 void load(
const filesystem::path&);
200 float training_error, Index validation_failures)
const;
271 const vector<vector<Index>>& batches,
272 const vector<Index>& input_feature_indices,
273 const vector<Index>& decoder_feature_indices,
274 const vector<Index>& target_feature_indices,
294 const vector<vector<Index>>& batches,
295 const vector<Index>& input_feature_indices,
296 const vector<Index>& decoder_feature_indices,
297 const vector<Index>& target_feature_indices);
403 void save(
const filesystem::path&)
const;
409 void print(
const string& message =
string())
const;
Trainable loss function attached to a NeuralNetwork and a Dataset.
Definition loss.h:44
bool get_display() const
Whether progress should be printed to stdout during training.
Definition optimizer.h:91
static void clip_gradient_norm(Buffer &gradient, float max_norm)
In-place gradient norm clipping.
float training_loss_goal
Training stops when the training loss reaches this value.
Definition optimizer.h:303
void write_common_xml(JsonWriter &) const
Writes the common Optimizer fields to JSON.
bool should_display(Index epoch) const
Whether the current epoch should print progress.
Definition optimizer.h:249
const Loss * get_loss() const
Read-only access to the loss being optimized.
Definition optimizer.h:88
virtual void from_JSON(const JsonDocument &)
Loads optimizer hyperparameters from a parsed JSON document.
cudaEvent_t batch_ready_event[2]
CUDA events signaling when each prefetched batch is ready.
Definition optimizer.h:326
void set_maximum_time(const float new_maximum_time)
Sets the maximum wall-clock training time.
Definition optimizer.h:127
void setup_device_training()
Allocates the CUDA stream and events used for batch prefetching.
EpochStats train_epoch(bool is_classification, ForwardPropagation &forward_propagation, BackPropagation &back_propagation, ThreadSafeQueue< Batch * > &empty_queue, ThreadSafeQueue< Batch * > &ready_queue, const vector< vector< Index > > &batches, const vector< Index > &input_feature_indices, const vector< Index > &decoder_feature_indices, const vector< Index > &target_feature_indices, const std::function< void(BackPropagation &)> &update)
Runs a single training epoch over all batches.
void read_common_xml(const Json *)
Reads the common Optimizer fields from JSON.
void save(const filesystem::path &) const
Saves the optimizer state to a file.
EpochStats evaluate_epoch(bool is_classification, ForwardPropagation &forward_propagation, ThreadSafeQueue< Batch * > &empty_queue, ThreadSafeQueue< Batch * > &ready_queue, const vector< vector< Index > > &batches, const vector< Index > &input_feature_indices, const vector< Index > &decoder_feature_indices, const vector< Index > &target_feature_indices)
Runs a single evaluation pass over all batches without updating parameters.
void set_unscaling()
Subclass hook to install the dataset-derived output unscalers.
Loss * loss
Loss being optimized; not owned.
Definition optimizer.h:300
virtual TrainingResults train()=0
Runs the optimization to completion.
void prefetch_batch(Batch &batch, Index sample_count, int slot)
Asynchronously prefetches the next training batch into a slot.
bool display
Whether progress should be printed to stdout during training.
Definition optimizer.h:318
void teardown_device_training()
Releases the CUDA stream and events allocated by setup_device_training().
void set_display_period(const Index new_display_period)
Sets how often progress is printed.
Definition optimizer.h:116
Index display_period
Number of epochs between progress prints.
Definition optimizer.h:315
void set_names()
Subclass hook to refresh layer name caches after a loss change.
Index maximum_validation_failures
Maximum number of consecutive validation-error increases tolerated.
Definition optimizer.h:306
void wait_prefetch(int slot)
Waits for the prefetch into a given slot to finish.
virtual void print() const
Prints a human-readable summary of the optimizer to stdout.
Definition optimizer.h:149
virtual ~Optimizer()=default
Virtual destructor.
const string & get_name() const
Canonical name of the optimizer (set by subclasses).
Definition optimizer.h:146
StoppingCondition
Reasons that can terminate a training run.
Definition optimizer.h:80
@ MaximumEpochsNumber
Configured epoch budget exhausted.
Definition optimizer.h:84
@ MaximumSelectionErrorIncreases
Validation error increased too many times.
Definition optimizer.h:83
@ None
No stopping condition was hit (still running).
Definition optimizer.h:80
@ LossGoal
Training loss reached the configured goal.
Definition optimizer.h:82
@ MinimumLossDecrease
Loss decrease between epochs fell below the threshold.
Definition optimizer.h:81
@ MaximumTime
Definition optimizer.h:85
void sync_device()
Synchronizes the device on the optimizer's CUDA stream.
void set_loss_goal(const float new_loss_goal)
Sets the training-loss goal.
Definition optimizer.h:133
void set_maximum_epochs(const Index new_maximum_epochs)
Sets the maximum number of epochs.
Definition optimizer.h:122
string name
Canonical name of the optimizer (set by subclasses).
Definition optimizer.h:321
virtual void to_JSON(JsonWriter &) const
Writes optimizer hyperparameters to a streaming JSON writer.
static float get_elapsed_time(const time_t &beginning_time)
Computes the elapsed wall-clock time since a reference instant.
virtual void set_loss(Loss *new_loss)
Updates the loss pointer; subclasses may override to refresh cached state derived from the loss.
Definition optimizer.h:104
Index maximum_epochs
Maximum number of training epochs.
Definition optimizer.h:309
void load(const filesystem::path &)
Loads the optimizer state from a file.
void set_scaling()
Subclass hook to install the dataset-derived input scalers.
float maximum_time
Maximum wall-clock training time in seconds.
Definition optimizer.h:312
void set_maximum_validation_failures(const Index new_maximum_validation_failures)
Sets the maximum number of consecutive validation-error increases tolerated.
Definition optimizer.h:138
void set(Loss *new_loss)
Re-initializes the optimizer by setting its loss pointer.
Definition optimizer.h:97
bool check_stopping_condition(TrainingResults &results, Index epoch, float elapsed_time, float training_error, Index validation_failures) const
Evaluates every stopping criterion and updates the result accordingly.
cudaStream_t memory_stream
CUDA stream used to prefetch batches into device memory.
Definition optimizer.h:324
virtual void set_display(bool new_display)
Toggles per-epoch progress printing.
Definition optimizer.h:110
Optimizer(Loss *loss=nullptr)
Constructs an optimizer bound to a loss function.
Definition thread_safe_queue.h:24
Definition adaptive_moment_estimation.h:19
void * cudaStream_t
Definition neural_network.h:71
Matrix< float, Dynamic, 1 > VectorR
Definition neural_network.h:156
void * cudaEvent_t
Definition neural_network.h:72
Device
Definition configuration.h:16
@ CPU
Definition configuration.h:16
Definition back_propagation.h:26
Owns the host-side and (optional) device-side buffers for one mini-batch of dataset samples.
Definition batch.h:37
Definition tensor_utilities.h:144
Aggregate metrics produced for a single training or evaluation epoch.
Definition optimizer.h:43
float error
Mean loss over the epoch.
Definition optimizer.h:45
float accuracy
Mean classification accuracy over the epoch (0 if not classification).
Definition optimizer.h:47
Definition forward_propagation.h:19
OptimizerData()=default
Default constructor; data buffer left empty.
VectorR training_direction
Current search direction (e.g. quasi-Newton step).
Definition optimizer.h:362
VectorR potential_parameters
Candidate parameter vector used by line searches.
Definition optimizer.h:360
Buffer data
Owning storage for the per-slot scratch tensors.
Definition optimizer.h:355
void set(const vector< Shape > &slot_shapes, Device device=Device::CPU)
Allocates the scratch buffer and slices it into views.
virtual void print() const
Prints a human-readable summary of the scratch state.
vector< TensorView > views
Per-slot non-owning views into data.
Definition optimizer.h:357
Index iteration
Iteration counter used by adaptive optimizers.
Definition optimizer.h:366
virtual ~OptimizerData()=default
Virtual destructor.
float initial_learning_rate
Initial learning rate at the start of a line search.
Definition optimizer.h:364
Per-epoch error history and final summary produced by Optimizer::train().
Definition optimizer.h:374
VectorR training_error_history
Per-epoch training error.
Definition optimizer.h:436
float loss
Final loss value.
Definition optimizer.h:445
void resize_validation_error_history(const Index)
Resizes the validation error history.
Index validation_failures
Number of consecutive validation-error increases at end of training.
Definition optimizer.h:448
void resize_training_error_history(const Index)
Resizes the training error history.
virtual ~TrainingResults()=default
Virtual destructor.
VectorR validation_error_history
Per-epoch validation error.
Definition optimizer.h:439
TrainingResults(const Index expected_epochs=0)
Constructs a TrainingResults pre-sized for an expected epoch count.
float get_training_error() const
Final training error (last entry of training_error_history).
Tensor< string, 2 > write_override_results(const Index decimals=3) const
Returns a 2D string table summarizing the training run.
string elapsed_time
Total elapsed wall-clock time, formatted as "hh:mm:ss".
Definition optimizer.h:442
void save(const filesystem::path &) const
Saves the training results (history and final summary) to a file.
string write_stopping_condition() const
Returns the canonical string name of the stopping condition.
Index get_epochs_number() const
Number of epochs effectively run.
float get_validation_error() const
Final validation error (last entry of validation_error_history).
Optimizer::StoppingCondition stopping_condition
Stopping condition that ended the training run.
Definition optimizer.h:412
void print(const string &message=string()) const
Prints a human-readable summary to stdout.
float loss_decrease
Loss decrease observed in the last epoch.
Definition optimizer.h:451