| # Table of Contents |
|
|
| - [Table of Contents](#table-of-contents) |
| - [main](#main) |
| - [PINN](#pinn) |
| - [PINN.pinns](#pinnpinns) |
| - [PINNd\_p Objects](#pinnd_p-objects) |
| - [forward](#forward) |
| - [PINNhd\_ma Objects](#pinnhd_ma-objects) |
| - [PINNT\_ma Objects](#pinnt_ma-objects) |
| - [utils](#utils) |
| - [utils.test](#utilstest) |
| - [utils.dataset\_loader](#utilsdataset_loader) |
| - [get\_dataset](#get_dataset) |
| - [utils.ndgan](#utilsndgan) |
| - [DCGAN Objects](#dcgan-objects) |
| - [\_\_init\_\_](#__init__) |
| - [define\_discriminator](#define_discriminator) |
| - [define\_generator](#define_generator) |
| - [build\_models](#build_models) |
| - [generate\_latent\_points](#generate_latent_points) |
| - [generate\_fake\_samples](#generate_fake_samples) |
| - [define\_gan](#define_gan) |
| - [summarize\_performance](#summarize_performance) |
| - [train\_gan](#train_gan) |
| - [start\_training](#start_training) |
| - [predict](#predict) |
| - [utils.data\_augmentation](#utilsdata_augmentation) |
| - [dataset Objects](#dataset-objects) |
| - [\_\_init\_\_](#__init__-1) |
| - [generate](#generate) |
| - [:orange\[nets\]](#orangenets) |
| - [nets.envs](#netsenvs) |
| - [SCI Objects](#sci-objects) |
| - [\_\_init\_\_](#__init__-2) |
| - [feature\_gen](#feature_gen) |
| - [feature\_importance](#feature_importance) |
| - [data\_flow](#data_flow) |
| - [init\_seed](#init_seed) |
| - [train\_epoch](#train_epoch) |
| - [compile](#compile) |
| - [train](#train) |
| - [save](#save) |
| - [onnx\_export](#onnx_export) |
| - [jit\_export](#jit_export) |
| - [inference](#inference) |
| - [plot](#plot) |
| - [plot3d](#plot3d) |
| - [performance](#performance) |
| - [performance\_super](#performance_super) |
| - [RCI Objects](#rci-objects) |
| - [data\_flow](#data_flow-1) |
| - [compile](#compile-1) |
| - [plot](#plot-1) |
| - [performance](#performance-1) |
| - [nets.dense](#netsdense) |
| - [Net Objects](#net-objects) |
| - [\_\_init\_\_](#__init__-3) |
| - [nets.design](#netsdesign) |
| - [B\_field\_norm](#b_field_norm) |
| - [PUdesign](#pudesign) |
| - [nets.deep\_dense](#netsdeep_dense) |
| - [dmodel Objects](#dmodel-objects) |
| - [\_\_init\_\_](#__init__-4) |
| - [nets.opti](#netsopti) |
| - [nets.opti.blackbox](#netsoptiblackbox) |
| - [Hyper Objects](#hyper-objects) |
| - [\_\_init\_\_](#__init__-5) |
| - [define\_model](#define_model) |
| - [objective](#objective) |
| - [start\_study](#start_study) |
|
|
| <a id="main"></a> |
|
|
| # main |
|
|
| <a id="PINN"></a> |
|
|
| # PINN |
|
|
| <a id="PINN.pinns"></a> |
|
|
| # PINN.pinns |
|
|
| <a id="PINN.pinns.PINNd_p"></a> |
|
|
| ## PINNd\_p Objects |
| |
| ```python |
| class PINNd_p(nn.Module) |
| ``` |
| |
| $d \mapsto P$ |
| |
| <a id="PINN.pinns.PINNd_p.forward"></a> |
| |
| #### forward |
| |
| ```python |
| def forward(x) |
| ``` |
| |
| $P,U$ input, $d$ output |
| |
| **Arguments**: |
| |
| - `x` __type__ - _description_ |
| |
| |
| **Returns**: |
| |
| - `_type_` - _description_ |
| |
| <a id="PINN.pinns.PINNhd_ma"></a> |
| |
| ## PINNhd\_ma Objects |
| |
| ```python |
| class PINNhd_ma(nn.Module) |
| ``` |
| |
| $h,d \mapsto m_a $ |
|
|
| <a id="PINN.pinns.PINNT_ma"></a> |
|
|
| ## PINNT\_ma Objects |
| |
| ```python |
| class PINNT_ma(nn.Module) |
| ``` |
| |
| $ m_a, U \mapsto T$ |
| |
| <a id="utils"></a> |
| |
| # utils |
| |
| <a id="utils.test"></a> |
| |
| # utils.test |
| |
| <a id="utils.dataset_loader"></a> |
| |
| # utils.dataset\_loader |
| |
| <a id="utils.dataset_loader.get_dataset"></a> |
| |
| #### get\_dataset |
| |
| ```python |
| def get_dataset(raw: bool = False, |
| sample_size: int = 1000, |
| name: str = 'dataset.pkl', |
| source: str = 'dataset.csv', |
| boundary_conditions: list = None) -> _pickle |
| ``` |
| |
| Gets augmented dataset |
|
|
| **Arguments**: |
|
|
| - `raw` _bool, optional_ - either to use source data or augmented. Defaults to False. |
| - `sample_size` _int, optional_ - sample size. Defaults to 1000. |
| - `name` _str, optional_ - name of wanted dataset. Defaults to 'dataset.pkl'. |
| - `boundary_conditions` _list,optional_ - y1,y2,x1,x2. |
|
|
| **Returns**: |
|
|
| - `_pickle` - pickle buffer |
|
|
| <a id="utils.ndgan"></a> |
|
|
| # utils.ndgan |
|
|
| <a id="utils.ndgan.DCGAN"></a> |
|
|
| ## DCGAN Objects |
|
|
| ```python |
| class DCGAN() |
| ``` |
|
|
| <a id="utils.ndgan.DCGAN.__init__"></a> |
|
|
| #### \_\_init\_\_ |
|
|
| ```python |
| def __init__(latent, data) |
| ``` |
|
|
| The function takes in two arguments, the latent space dimension and the dataframe. It then sets |
|
|
| the latent space dimension, the dataframe, the number of inputs and outputs, and then builds the |
| models |
|
|
| **Arguments**: |
|
|
| - `latent`: The number of dimensions in the latent space |
| - `data`: This is the dataframe that contains the data that we want to generate |
|
|
| <a id="utils.ndgan.DCGAN.define_discriminator"></a> |
|
|
| #### define\_discriminator |
| |
| ```python |
| def define_discriminator(inputs=8) |
| ``` |
| |
| The discriminator is a neural network that takes in a vector of length 8 and outputs a single |
| |
| value between 0 and 1 |
| |
| **Arguments**: |
| |
| - `inputs`: number of features in the dataset, defaults to 8 (optional) |
| |
| **Returns**: |
| |
| The model is being returned. |
| |
| <a id="utils.ndgan.DCGAN.define_generator"></a> |
| |
| #### define\_generator |
| |
| ```python |
| def define_generator(latent_dim, outputs=8) |
| ``` |
| |
| The function takes in a latent dimension and outputs and returns a model with two hidden layers |
| |
| and an output layer |
| |
| **Arguments**: |
| |
| - `latent_dim`: The dimension of the latent space, or the space that the generator will map |
| to |
| - `outputs`: the number of outputs of the generator, defaults to 8 (optional) |
| |
| **Returns**: |
| |
| The model is being returned. |
| |
| <a id="utils.ndgan.DCGAN.build_models"></a> |
| |
| #### build\_models |
| |
| ```python |
| def build_models() |
| ``` |
| |
| The function returns the generator and discriminator models |
| |
| **Returns**: |
| |
| The generator and discriminator models are being returned. |
| |
| <a id="utils.ndgan.DCGAN.generate_latent_points"></a> |
| |
| #### generate\_latent\_points |
| |
| ```python |
| def generate_latent_points(latent_dim, n) |
| ``` |
| |
| > Generate random points in latent space as input for the generator |
| |
| **Arguments**: |
| |
| - `latent_dim`: the dimension of the latent space, which is the input to the generator |
| - `n`: number of images to generate |
| |
| **Returns**: |
| |
| A numpy array of random numbers. |
| |
| <a id="utils.ndgan.DCGAN.generate_fake_samples"></a> |
| |
| #### generate\_fake\_samples |
| |
| ```python |
| def generate_fake_samples(generator, latent_dim, n) |
| ``` |
| |
| It generates a batch of fake samples with class labels |
| |
| **Arguments**: |
| |
| - `generator`: The generator model that we will train |
| - `latent_dim`: The dimension of the latent space, e.g. 100 |
| - `n`: The number of samples to generate |
|
|
| **Returns**: |
|
|
| x is the generated images and y is the labels for the generated images. |
|
|
| <a id="utils.ndgan.DCGAN.define_gan"></a> |
|
|
| #### define\_gan |
| |
| ```python |
| def define_gan(generator, discriminator) |
| ``` |
| |
| The function takes in a generator and a discriminator, sets the discriminator to be untrainable, |
| |
| and then adds the generator and discriminator to a sequential model. The sequential model is then compiled with an optimizer and a loss function. |
| |
| The optimizer is adam, which is a type of gradient descent algorithm. |
| |
| Loss function is binary crossentropy, which is a loss function that is used for binary |
| classification problems. |
| |
| |
| The function then returns the GAN. |
| |
| **Arguments**: |
| |
| - `generator`: The generator model |
| - `discriminator`: The discriminator model that takes in a dataset and outputs a single value |
| representing fake/real |
| |
| **Returns**: |
| |
| The model is being returned. |
| |
| <a id="utils.ndgan.DCGAN.summarize_performance"></a> |
| |
| #### summarize\_performance |
| |
| ```python |
| def summarize_performance(epoch, generator, discriminator, latent_dim, n=200) |
| ``` |
| |
| > This function evaluates the discriminator on real and fake data, and plots the real and fake |
| |
| data |
| |
| **Arguments**: |
| |
| - `epoch`: the number of epochs to train for |
| - `generator`: the generator model |
| - `discriminator`: the discriminator model |
| - `latent_dim`: The dimension of the latent space |
| - `n`: number of samples to generate, defaults to 200 (optional) |
| |
| <a id="utils.ndgan.DCGAN.train_gan"></a> |
| |
| #### train\_gan |
| |
| ```python |
| def train_gan(g_model, |
| d_model, |
| gan_model, |
| latent_dim, |
| num_epochs=2500, |
| num_eval=2500, |
| batch_size=2) |
| ``` |
| |
| **Arguments**: |
|
|
| - `g_model`: the generator model |
| - `d_model`: The discriminator model |
| - `gan_model`: The GAN model, which is the generator model combined with the discriminator |
| model |
| - `latent_dim`: The dimension of the latent space. This is the number of random numbers that |
| the generator model will take as input |
| - `num_epochs`: The number of epochs to train for, defaults to 2500 (optional) |
| - `num_eval`: number of epochs to run before evaluating the model, defaults to 2500 |
| (optional) |
| - `batch_size`: The number of samples to use for each gradient update, defaults to 2 |
| (optional) |
|
|
| <a id="utils.ndgan.DCGAN.start_training"></a> |
|
|
| #### start\_training |
| |
| ```python |
| def start_training() |
| ``` |
| |
| The function takes the generator, discriminator, and gan models, and the latent vector as |
| arguments, and then calls the train_gan function. |
| |
| <a id="utils.ndgan.DCGAN.predict"></a> |
| |
| #### predict |
| |
| ```python |
| def predict(n) |
| ``` |
| |
| It takes the generator model and the latent space as input and returns a batch of fake samples |
| |
| **Arguments**: |
| |
| - `n`: the number of samples to generate |
| |
| **Returns**: |
| |
| the generated fake samples. |
| |
| <a id="utils.data_augmentation"></a> |
| |
| # utils.data\_augmentation |
| |
| <a id="utils.data_augmentation.dataset"></a> |
| |
| ## dataset Objects |
| |
| ```python |
| class dataset() |
| ``` |
| |
| Creates dataset from input source |
| |
| <a id="utils.data_augmentation.dataset.__init__"></a> |
| |
| #### \_\_init\_\_ |
| |
| ```python |
| def __init__(number_samples: int, |
| name: str, |
| source: str, |
| boundary_conditions: list = None) |
| ``` |
| |
| |
| **Arguments**: |
| |
| - `number_samples` _int_ - number of samples to be genarated |
| - `name` _str_ - name of dataset |
| - `source` _str_ - source file |
| - `boundary_conditions` _list_ - y1,y2,x1,x2 |
| |
| <a id="utils.data_augmentation.dataset.generate"></a> |
| |
| #### generate |
| |
| ```python |
| def generate() |
| ``` |
| |
| The function takes in a dataframe, normalizes it, and then trains a DCGAN on it. |
| |
| The DCGAN is a type of generative adversarial network (GAN) that is used to generate new data. |
| |
| The DCGAN is trained on the normalized dataframe, and then the DCGAN is used to generate new |
| data. |
| |
| The new data is then concatenated with the original dataframe, and the new dataframe is saved as |
| a pickle file. |
| |
| The new dataframe is then returned. |
| |
| **Returns**: |
| |
| The dataframe is being returned. |
| |
| <a id="nets"></a> |
| |
| # :orange[nets] |
| |
| <a id="nets.envs"></a> |
| |
| # nets.envs |
| |
| <a id="nets.envs.SCI"></a> |
| |
| ## SCI Objects |
| |
| ```python |
| class SCI() |
| ``` |
| |
| Scaled computing interface. |
| |
| **Arguments**: |
| |
| - `hidden_dim` _int, optional_ - Max demension of hidden linear layer. Defaults to 200. Should be >80 in not 1d case |
| - `dropout` _bool, optional_ - LEGACY, don't use. Defaults to True. |
| - `epochs` _int, optional_ - Optionally specify epochs here, but better in train. Defaults to 10. |
| - `dataset` _str, optional_ - dataset to be selected from ./data. Defaults to 'test.pkl'. If name not exists, code will generate new dataset with upcoming parameters. |
| - `sample_size` _int, optional_ - Samples to be generated (note: BEFORE applying boundary conditions). Defaults to 1000. |
| - `source` _str, optional_ - Source from which data will be generated. Better to not change. Defaults to 'dataset.csv'. |
| - `boundary_conditions` _list, optional_ - If sepcified, whole dataset will be cut rectangulary. Input list is [ymin,ymax,xmin,xmax] type. Defaults to None. |
| |
| <a id="nets.envs.SCI.__init__"></a> |
| |
| #### \_\_init\_\_ |
| |
| ```python |
| def __init__(hidden_dim: int = 200, |
| dropout: bool = True, |
| epochs: int = 10, |
| dataset: str = 'test.pkl', |
| sample_size: int = 1000, |
| source: str = 'dataset.csv', |
| boundary_conditions: list = None, |
| batch_size: int = 20) |
| ``` |
| |
|
|
|
|
| **Arguments**: |
|
|
| - `hidden_dim` _int, optional_ - Max demension of hidden linear layer. Defaults to 200. Should be >80 in not 1d case |
| - `dropout` _bool, optional_ - LEGACY, don't use. Defaults to True. |
| - `epochs` _int, optional_ - Optionally specify epochs here, but better in train. Defaults to 10. |
| - `dataset` _str, optional_ - dataset to be selected from ./data. Defaults to 'test.pkl'. If name not exists, code will generate new dataset with upcoming parameters. |
| - `sample_size` _int, optional_ - Samples to be generated (note: BEFORE applying boundary conditions). Defaults to 1000. |
| - `source` _str, optional_ - Source from which data will be generated. Better to not change. Defaults to 'dataset.csv'. |
| - `boundary_conditions` _list, optional_ - If sepcified, whole dataset will be cut rectangulary. Input list is [ymin,ymax,xmin,xmax] type. Defaults to None. |
| - `batch_size` _int, optional_ - Batch size for training. |
|
|
| <a id="nets.envs.SCI.feature_gen"></a> |
|
|
| #### feature\_gen |
| |
| ```python |
| def feature_gen(base: bool = True, |
| fname: str = None, |
| index: int = None, |
| func=None) -> None |
| ``` |
| |
| Generate new features. If base true, generates most obvious ones. You can customize this by adding |
| new feature as name of column - fname, index of parent column, and lambda function which needs to be applied elementwise. |
|
|
| **Arguments**: |
|
|
| - `base` _bool, optional_ - Defaults to True. |
| - `fname` _str, optional_ - Name of new column. Defaults to None. |
| - `index` _int, optional_ - Index of parent column. Defaults to None. |
| - `func` __type_, optional_ - lambda function. Defaults to None. |
| |
| <a id="nets.envs.SCI.feature_importance"></a> |
| |
| #### feature\_importance |
| |
| ```python |
| def feature_importance(X: pd.DataFrame, Y: pd.Series, verbose: int = 1) |
| ``` |
| |
| Gets feature importance by SGD regression and score selection. Default threshold is 1.25*mean |
| input X as self.df.iloc[:,(columns of choice)] |
| Y as self.df.iloc[:,(column of choice)] |
| |
| **Arguments**: |
| |
| - `X` _pd.DataFrame_ - Builtin DataFrame |
| - `Y` _pd.Series_ - Builtin Series |
| - `verbose` _int, optional_ - either to or to not print actual report. Defaults to 1. |
| |
| **Returns**: |
| |
| Report (str) |
| |
| <a id="nets.envs.SCI.data_flow"></a> |
| |
| #### data\_flow |
| |
| ```python |
| def data_flow(columns_idx: tuple = (1, 3, 3, 5), |
| idx: tuple = None, |
| split_idx: int = 800) -> torch.utils.data.DataLoader |
| ``` |
| |
| Data prep pipeline |
| It is called automatically, don't call it in your code. |
| |
| **Arguments**: |
| |
| - `columns_idx` _tuple, optional_ - Columns to be selected (sliced 1:2 3:4) for feature fitting. Defaults to (1,3,3,5). |
| - `idx` _tuple, optional_ - 2|3 indexes to be selected for feature fitting. Defaults to None. Use either idx or columns_idx (for F:R->R idx, for F:R->R2 columns_idx) |
| split_idx (int) : Index to split for training |
| |
| |
| **Returns**: |
| |
| - `torch.utils.data.DataLoader` - Torch native dataloader |
| |
| <a id="nets.envs.SCI.init_seed"></a> |
| |
| #### init\_seed |
| |
| ```python |
| def init_seed(seed) |
| ``` |
| |
| Initializes seed for torch - optional |
| |
| <a id="nets.envs.SCI.train_epoch"></a> |
| |
| #### train\_epoch |
| |
| ```python |
| def train_epoch(X, model, loss_function, optim) |
| ``` |
| |
| Inner function of class - don't use. |
| |
| We iterate through the data, calculate the loss, backpropagate, and update the weights |
| |
| **Arguments**: |
| |
| - `X`: the training data |
| - `model`: the model we're training |
| - `loss_function`: the loss function to use |
| - `optim`: the optimizer, which is the algorithm that will update the weights of the model |
| |
| <a id="nets.envs.SCI.compile"></a> |
| |
| #### compile |
| |
| ```python |
| def compile(columns: tuple = None, |
| idx: tuple = None, |
| optim: torch.optim = torch.optim.AdamW, |
| loss: nn = nn.L1Loss, |
| model: nn.Module = dmodel, |
| custom: bool = False, |
| lr: float = 0.0001) -> None |
| ``` |
| |
| Builds model, loss, optimizer. Has defaults |
| |
| **Arguments**: |
| |
| - `columns` _tuple, optional_ - Columns to be selected for feature fitting. Defaults to (1,3,3,5). |
| - `optim` - torch Optimizer. Default AdamW |
| - `loss` - torch Loss function (nn). Defaults to L1Loss |
| |
| <a id="nets.envs.SCI.train"></a> |
| |
| #### train |
| |
| ```python |
| def train(epochs: int = 10) -> None |
| ``` |
| |
| Train model |
| - If sklearn instance uses .fit() |
| |
| - epochs (int,optional) |
| |
| <a id="nets.envs.SCI.save"></a> |
| |
| #### save |
| |
| ```python |
| def save(name: str = 'model.pt') -> None |
| ``` |
| |
| > This function saves the model to a file |
| |
| **Arguments**: |
| |
| - `name` (`str (optional)`): The name of the file to save the model to, defaults to model.pt |
| |
| <a id="nets.envs.SCI.onnx_export"></a> |
| |
| #### onnx\_export |
| |
| ```python |
| def onnx_export(path: str = './models/model.onnx') |
| ``` |
| |
| > We are exporting the model to the ONNX format, using the input data and the model itself |
| |
| **Arguments**: |
| |
| - `path` (`str (optional)`): The path to save the model to, defaults to ./models/model.onnx |
| |
| <a id="nets.envs.SCI.jit_export"></a> |
| |
| #### jit\_export |
| |
| ```python |
| def jit_export(path: str = './models/model.pt') |
| ``` |
| |
| Exports properly defined model to jit |
| |
| **Arguments**: |
| |
| - `path` _str, optional_ - path to models. Defaults to './models/model.pt'. |
| |
| <a id="nets.envs.SCI.inference"></a> |
| |
| #### inference |
| |
| ```python |
| def inference(X: tensor, model_name: str = None) -> np.ndarray |
| ``` |
| |
| Inference of (pre-)trained model |
| |
| **Arguments**: |
| |
| - `X` _tensor_ - your data in domain of train |
| |
| **Returns**: |
| |
| - `np.ndarray` - predictions |
| |
| <a id="nets.envs.SCI.plot"></a> |
| |
| #### plot |
| |
| ```python |
| def plot() |
| ``` |
| |
| > If the input and output dimensions are the same, plot the input and output as a scatter plot. |
| If the input and output dimensions are different, plot the first dimension of the input and |
| output as a scatter plot |
| |
| <a id="nets.envs.SCI.plot3d"></a> |
| |
| #### plot3d |
| |
| ```python |
| def plot3d(colX=0, colY=1) |
| ``` |
| |
| Plot of inputs and predicted data in mesh format |
| |
| **Returns**: |
| |
| plotly plot |
| |
| <a id="nets.envs.SCI.performance"></a> |
| |
| #### performance |
| |
| ```python |
| def performance(c=0.4) -> dict |
| ``` |
| |
| Automatic APE based performance if applicable, else returns nan |
| |
| **Arguments**: |
| |
| - `c` _float, optional_ - ZDE mitigation constant. Defaults to 0.4. |
| |
| **Returns**: |
| |
| - `dict` - {'Generator_Accuracy, %':np.mean(a),'APE_abs, %':abs_ape,'Model_APE, %': ape} |
| |
| <a id="nets.envs.SCI.performance_super"></a> |
| |
| #### performance\_super |
| |
| ```python |
| def performance_super(c=0.4, |
| real_data_column_index: tuple = (1, 8), |
| real_data_samples: int = 23, |
| generated_length: int = 1000) -> dict |
| ``` |
| |
| Performance by custom parameters. APE loss |
| |
| **Arguments**: |
| |
| - `c` _float, optional_ - ZDE mitigation constant. Defaults to 0.4. |
| - `real_data_column_index` _tuple, optional_ - Defaults to (1,8). |
| - `real_data_samples` _int, optional_ - Defaults to 23. |
| - `generated_length` _int, optional_ - Defaults to 1000. |
| |
| **Returns**: |
| |
| - `dict` - {'Generator_Accuracy, %':np.mean(a),'APE_abs, %':abs_ape,'Model_APE, %': ape} |
| |
| <a id="nets.envs.RCI"></a> |
| |
| ## RCI Objects |
| |
| ```python |
| class RCI(SCI) |
| ``` |
| |
| Real values interface, uses different types of NN, NO scaling. |
| Parent: |
| SCI() |
| |
| <a id="nets.envs.RCI.data_flow"></a> |
| |
| #### data\_flow |
| |
| ```python |
| def data_flow(columns_idx: tuple = (1, 3, 3, 5), |
| idx: tuple = None, |
| split_idx: int = 800) -> torch.utils.data.DataLoader |
| ``` |
| |
| Data prep pipeline |
| |
| **Arguments**: |
| |
| - `columns_idx` _tuple, optional_ - Columns to be selected (sliced 1:2 3:4) for feature fitting. Defaults to (1,3,3,5). |
| - `idx` _tuple, optional_ - 2|3 indexes to be selected for feature fitting. Defaults to None. Use either idx or columns_idx (for F:R->R idx, for F:R->R2 columns_idx) |
| split_idx (int) : Index to split for training |
| |
| |
| **Returns**: |
| |
| - `torch.utils.data.DataLoader` - Torch native dataloader |
| |
| <a id="nets.envs.RCI.compile"></a> |
| |
| #### compile |
| |
| ```python |
| def compile(columns: tuple = None, |
| idx: tuple = (3, 1), |
| optim: torch.optim = torch.optim.AdamW, |
| loss: nn = nn.L1Loss, |
| model: nn.Module = PINNd_p, |
| lr: float = 0.001) -> None |
| ``` |
| |
| Builds model, loss, optimizer. Has defaults |
| |
| **Arguments**: |
| |
| - `columns` _tuple, optional_ - Columns to be selected for feature fitting. Defaults to None. |
| - `idx` _tuple, optional_ - indexes to be selected Default (3,1) |
| optim - torch Optimizer |
| loss - torch Loss function (nn) |
| |
| <a id="nets.envs.RCI.plot"></a> |
| |
| #### plot |
| |
| ```python |
| def plot() |
| ``` |
| |
| Plots 2d plot of prediction vs real values |
| |
| <a id="nets.envs.RCI.performance"></a> |
| |
| #### performance |
| |
| ```python |
| def performance(c=0.4) -> dict |
| ``` |
| |
| RCI performnace. APE errors. |
| |
| **Arguments**: |
| |
| - `c` _float, optional_ - correction constant to mitigate division by 0 error. Defaults to 0.4. |
| |
| **Returns**: |
| |
| - `dict` - {'Generator_Accuracy, %':np.mean(a),'APE_abs, %':abs_ape,'Model_APE, %': ape} |
| |
| <a id="nets.dense"></a> |
| |
| # nets.dense |
| |
| <a id="nets.dense.Net"></a> |
| |
| ## Net Objects |
| |
| ```python |
| class Net(nn.Module) |
| ``` |
| |
| The Net class inherits from the nn.Module class, which has a number of attributes and methods (such |
| as .parameters() and .zero_grad()) which we will be using. You can read more about the nn.Module |
| class [here](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) |
| |
| <a id="nets.dense.Net.__init__"></a> |
| |
| #### \_\_init\_\_ |
| |
| ```python |
| def __init__(input_dim: int = 2, hidden_dim: int = 200) |
| ``` |
| |
| We create a neural network with two hidden layers, each with **hidden_dim** neurons, and a ReLU activation |
| |
| function. The output layer has one neuron and no activation function |
| |
| **Arguments**: |
| |
| - `input_dim` (`int (optional)`): The dimension of the input, defaults to 2 |
| - `hidden_dim` (`int (optional)`): The number of neurons in the hidden layer, defaults to 200 |
| |
| <a id="nets.design"></a> |
| |
| # nets.design |
| |
| <a id="nets.design.B_field_norm"></a> |
| |
| #### B\_field\_norm |
| |
| ```python |
| def B_field_norm(Bmax: float, L: float, k: int = 16, plot=True) -> np.array |
| ``` |
| |
| Returns vec B_z for MS config |
| |
| **Arguments**: |
| |
| - `Bmax` _any_ - maximum B in thruster |
| L - channel length |
| k - magnetic field profile number |
| |
| <a id="nets.design.PUdesign"></a> |
| |
| #### PUdesign |
| |
| ```python |
| def PUdesign(P: float, U: float) -> pd.DataFrame |
| ``` |
| |
| Computes design via numerical model, uses fits from PINNs |
| |
| **Arguments**: |
| |
| - `P` _float_ - _description_ |
| - `U` _float_ - _description_ |
| |
| |
| **Returns**: |
| |
| - `_type_` - _description_ |
| |
| <a id="nets.deep_dense"></a> |
| |
| # nets.deep\_dense |
| |
| <a id="nets.deep_dense.dmodel"></a> |
| |
| ## dmodel Objects |
| |
| ```python |
| class dmodel(nn.Module) |
| ``` |
| |
| <a id="nets.deep_dense.dmodel.__init__"></a> |
| |
| #### \_\_init\_\_ |
| |
| ```python |
| def __init__(in_features=1, hidden_features=200, out_features=1) |
| ``` |
| |
| We're creating a neural network with 4 layers, each with 200 neurons. The first layer takes in the input, the second layer takes in the output of the first layer, the third layer takes in the |
| output of the second layer, and the fourth layer takes in the output of the third layer |
| |
| **Arguments**: |
| |
| - `in_features`: The number of input features, defaults to 1 (optional) |
| - `hidden_features`: the number of neurons in the hidden layers, defaults to 200 (optional) |
| - `out_features`: The number of classes for classification (1 for regression), defaults to 1 |
| (optional) |
| |
| <a id="nets.opti"></a> |
| |
| # nets.opti |
| |
| <a id="nets.opti.blackbox"></a> |
| |
| # nets.opti.blackbox |
| |
| <a id="nets.opti.blackbox.Hyper"></a> |
| |
| ## Hyper Objects |
| |
| ```python |
| class Hyper(SCI) |
| ``` |
| |
| Hyper parameter tunning class. Allows to generate best NN architecture for task. Inputs are column indexes. idx[-1] is targeted value. |
| Based on OPTUNA algorithms it is very fast and reliable. Outputs are NN parameters in json. Optionally full report for every trial is available at the neptune.ai |
| |
| <a id="nets.opti.blackbox.Hyper.__init__"></a> |
| |
| #### \_\_init\_\_ |
| |
| ```python |
| def __init__(idx: tuple = (1, 3, 7), *args, **kwargs) |
| ``` |
| |
| The function __init__() is a constructor that initializes the class Hyper |
| |
| **Arguments**: |
| |
| - `idx` (`tuple`): tuple of integers, the indices of the data to be loaded |
| |
| <a id="nets.opti.blackbox.Hyper.define_model"></a> |
| |
| #### define\_model |
| |
| ```python |
| def define_model(trial) |
| ``` |
| |
| We define a function that takes in a trial object and returns a neural network with the number |
| |
| of layers, hidden units and activation functions defined by the trial object. |
| |
| **Arguments**: |
| |
| - `trial`: This is an object that contains the information about the current trial |
| |
| **Returns**: |
| |
| A sequential model with the number of layers, hidden units and activation functions |
| defined by the trial. |
| |
| <a id="nets.opti.blackbox.Hyper.objective"></a> |
| |
| #### objective |
| |
| ```python |
| def objective(trial) |
| ``` |
| |
| We define a model, an optimizer, and a loss function. We then train the model for a number of |
| |
| epochs, and report the loss at the end of each epoch |
| |
| *"optimizer": ["Adam", "RMSprop", "SGD" 'AdamW','Adamax','Adagrad']* |
| *"lr" $\in$ [1e-7,1e-3], log=True* |
| |
| **Arguments**: |
| |
| - `trial`: The trial object that is passed to the objective function |
| |
| **Returns**: |
| |
| The accuracy of the model. |
| |
| <a id="nets.opti.blackbox.Hyper.start_study"></a> |
| |
| #### start\_study |
| |
| ```python |
| def start_study(n_trials: int = 100, |
| neptune_project: str = None, |
| neptune_api: str = None) |
| ``` |
| |
| It takes a number of trials, a neptune project name and a neptune api token as input and runs |
| |
| the objective function on the number of trials specified. If the neptune project and api token |
| are provided, it logs the results to neptune |
| |
| **Arguments**: |
| |
| - `n_trials` (`int (optional)`): The number of trials to run, defaults to 100 |
| - `neptune_project` (`str`): the name of the neptune project you want to log to |
| - `neptune_api` (`str`): your neptune api key |
| |
| |