Changelog#

New in 0.7.0#

  1. Ability to configure any learn rate using helixnet.optimizers.LearnRate

  2. Added Exponential Learn Rate decay helixnet.optimizers.ExpDecay

  3. Added linear Learn Rate decay helixnet.optimizers.LinearDecay

  4. Optimizers now can accept a float as a constant learn rate or helixnet.optimizers.LearnRate

Breaking Changes in 0.7.0#

  1. Now removed get_current_lr method and decay argument in all optimizers

New in 0.6.1#

  1. Switch to hatch as a build system

  2. The __version__ is in __init__ and used to be shared across build system and documentation

New in 0.6.0#

  1. Automatic training loop with live views that shows the loss

    in realtime and also supports validation metrics

  2. New helixnet.metrics

  3. New losses helixnet.metrics.BinaryCrossEntropy()

    helixnet.metrics.CosineSimilarityLoss() helixnet.metrics.HingeLoss() helixnet.metrics.FocalLoss() helixnet.metrics.LogCoshLoss() helixnet.metrics.HuberLoss()

  4. helixnet.models.Sequential.summary uses rich tables

New in 0.5.1#

  1. Fixed a bug in loading the models

  2. Added helixnet.layer.Layer.populate_self

New in 0.5.0#

  1. Now helixnet.layers.Layer can determine the name of layer automatically

  2. Added the ability to save layers and get their configuration from __init__ method

  3. Added the ability to save & load helixnet.models.Sequential

  4. Added helixnet.layers.DenseTranspose

  5. Added helixnet.layers.ConvTranspose2D

  6. Added helixnet.layers.Reshape

  7. Migrated the tests to pytest

  8. Added new module helixnet.io for saving and loading helixnet.models.Sequential

Breaking Changes#

Now helixnet.layers.Layer doesn’t accept the type of the layer

New in 0.4.0#

  1. Added helixnet.layers.BatchNorm for batch normalization

  2. Added helixnet.layers.Dropout for dropping out some features

  3. Added new optimizer helixnet.optimizers.NesterovSGD for applying nesterov trick on momentum helixnet.optimizers.SGD

  4. Added gradient clipping in helixnet.optimizers.Optimizer

New in 0.3.0#

  1. Added support for regularizers which introduced

    1. Added new class helixnet.optimizer.Regularizer

    2. Created helixnet.optimizer.L1 & helixnet.optimizer.L2

  2. refactored the logic of helixnet.optimizer.Optimizer

    which itself handles helixnet.optimizer.Regularizer

  3. Now helixnet.layers.Layer.predict works correctly

    With helixnet.layers.Layer.predict you can use the model for inference with out building a computational graph

Breaking changes#

0.3.0 has introduced many breaking changes like

  1. renamed the module optimiser to helixnet.optimizer

  2. renamed the ABC class optimiser to helixnet.optimizer.Optimizer

  3. renamed Optimizer.optimise to helixnet.optimizer.Optimizer.optimize

  4. helixnet.optimizer.Optimizer.optimize now needs the loss to be passed

    1. The loss to be passed without Performing the backpropagation on the loss a.k.a (loss_val.backward())

    2. If your have written a custom optimizer with a custom training loop through

      helixnet.optimizer.Optimizer.optimize you’ll need to write to handle the regularization. But if you didn’t write a custom loop your optimizer will be fully compatible

the training should be as follows

optim = helixnet.optimizers.SGD(0.1, None, 0.9)
# Forward pass produces logits (raw scores)
logits = model.forward(x)

# The loss function takes logits and integer labels
loss_value = mg.nnet.losses.softmax_crossentropy(logits, y_true)

# You should call `item` instead of saving the loss itself
# Because it's value will be changed by regularizer
loss_history.append(loss_value.item())

optim.optimize(model, loss_value)
# Clear grads for the next iteration

5. Inheriting helixnet.optimizers.Optimizer now needs learn rate and a list of regularizers to be passed.