BaseNeuralNet¶
Defined in fynance.models._base
- class BaseNeuralNet[source]
Bases:
ModuleBase object for neural network model with PyTorch.
Thin wrapper around
torch.nn.Modulethat bundles the boilerplate of training a financial model: criterion + optimizer setup, a one-batchtrain_onstep, gradient-freepredict, data coercion from NumPy / pandas / tensor, and weight serialization. Subclass it (or one of the higher-level subclasses such asMultiLayerPerceptron) and implement theforwardmethod to define a new architecture; everything else is inherited.Inherits of torch.nn.Module object with some higher level methods.
Public API contract (stable for the 1.x series)
Shapes — feed-forward subclasses (e.g.
MultiLayerPerceptron) expectXof shape(T, N)andyof shape(T, M), whereTis the number of observations,Nthe number of input features andMthe number of targets. Recurrent subclasses infynance.models.rnn,fynance.models.gru,fynance.models.lstmconsumeXof shape(T, S, N), whereSis the sequence length.Dtypes —
set_datacoerces inputs through_set_data. The expected default for bothXandyis a floating tensor (torch.float32is the de-facto convention in the project doctests). Passx_type/y_typeexplicitly to override; mismatched dtypes betweenX,yand the model parameters will raise at the firstforwardpass.Device — the wrapper does not move tensors automatically. Models live on CPU unless the caller explicitly calls
.to(device)on both the module and the data tensors before training.State invariants — typical lifecycle:
set_optimizer→set_data(optional) →train_on(loops) →predict.train_onrequirescriterionandoptimizerto be set; calling it beforeset_optimizerraisesAttributeError.Serialization —
save_model/load_modelpersist the modulestate_dictand, whensave_optimizer/load_optimizeris True, the optimizerstate_dict. Random seeds, learning-rate schedulers and the cached training data (self.X,self.y) are not serialized.
- Attributes:
- criteriontorch.nn.modules.loss.Loss
A loss function.
- optimizertorch.optim.Optimizer
An optimizer algorithm.
- N, Mint
Respectively input and output dimension.
Methods
set_optimizer(criterion, optimizer[, params])Set the optimizer object.
train_on(X, y)Trains the neural network model on a single batch.
predict(X)Predicts outputs of neural network model.
set_data(X, y[, x_type, y_type])Set data inputs and outputs.
save_model(path[, save_optimizer])Save the model with this weights and parameters.
load_model(path[, load_optimizer])Save the model with this weights and parameters.
See also
fynance.models.mlp.MultiLayerPerceptronfynance.models.rolling.RollMultiLayerPerceptron
- load_model(path, load_optimizer=False)[source]
Save the model with this weights and parameters.
- Parameters:
- pathstr or os.PathLike object
Path to load the model.
- load_optimizerbool, optional
If True, then load also the optimizer.
- predict(X)[source]
Predicts outputs of neural network model.
Runs
self.forward(X)undertorch.no_grad, so no autograd graph is built. The returned tensor is detached and lives on the same device as the model parameters.- Parameters:
- Xtorch.Tensor
Inputs to compute prediction. Same shape and dtype contract as
train_on.
- Returns:
- torch.Tensor
Outputs prediction (detached, gradient-free).
- save_model(path, save_optimizer=False)[source]
Save the model with this weights and parameters.
- Parameters:
- pathstr or os.PathLike object
Path to save the model.
- save_optimizerbool, optional
If True, then save also the optimizer.
- set_data(X, y, x_type=None, y_type=None)[source]
Set data inputs and outputs.
Coerces
Xandytotorch.Tensorand caches them asself.X/self.y. After the call the attributesself.T(number of observations),self.N(input columns) andself.M(output columns) are set.- Parameters:
- X, yarray-like
Respectively input and output data. Accepted types:
numpy.ndarray,torch.Tensor,pandas.DataFrame. Shapes must be(T, N)and(T, M)respectively.- x_type, y_typetorch.dtype, optional
Target dtypes for the resulting tensors. Default is None, which preserves the input dtype.
- Returns:
- BaseNeuralNet
self, to allow chaining.
- Raises:
- ValueError
If
self.N/self.Mwere already set andX/ydo not match, or ifXandyhave different lengths.
- set_lr_scheduler(lr_scheduler, **kwargs)[source]
Set dynamic learning rate.
- Parameters:
- lr_schedulertorch.optim.lr_scheduler._LRScheduler
Method from
torch.optim.lr_schedulerto wrapself.optimizer, cf moduletorch.optim.lr_schedulerin PyTorch documentation [2].- **kwargs
Keyword arguments to pass to the learning rate scheduler.
References
- set_optimizer(criterion, optimizer, params=None, **kwargs)[source]
Set the optimizer object.
Set optimizer object with specified criterion as loss function and any kwargs as optional parameters.
- Parameters:
- criterionCallabletorch.nn.modules.loss
A loss function.
- optimizertorch.optim.Optimizer
An optimizer algorithm.
- paramsobject or iterable object
Layer of parameters to optimize or dicts defining parameter groups. If set to None then all parameters of model will be optimized. Default is None.
- **kwargs
Keyword arguments of
optimizer, cf PyTorch documentation [1].
- Returns:
- BaseNeuralNet
Self object model.
References
- set_seed(seed_torch=None, seed_numpy=None)[source]
Set seed for PyTorch and NumPy random number generator.
- Parameters:
- seed_torch, seed_numpybool or int, optional
If seed is an int \(0 < seed < 2^32\) set respectively PyTorch and NumPy seed with the number. Otherwise if is True then choose a random number, else doesn’t set seed.
- train_on(X, y)[source]
Trains the neural network model on a single batch.
Runs one forward / backward / optimizer-step cycle on the batch
(X, y). As a side effect, gradients of all parameters are zeroed before the forward pass and the optimizer state is advanced afterwards. If a learning-rate scheduler has been registered viaset_lr_scheduler, itsstepis also called.- Parameters:
- X, ytorch.Tensor
Respectively inputs and outputs to train model. Shapes must match what
self.forwardexpects (see the class-level “Public API contract” section).
- Returns:
- torch.Tensor
The loss tensor produced by
self.criterion(self(X), y), with gradient already consumed byloss.backward().
- Raises:
- AttributeError
If
set_optimizerhas not been called yet.