Metadata-Version: 2.0
Name: torchutils
Version: 0.0.2
Summary: PyTorch utility functions.
Home-page: https://github.com/anjandeepsahni/pytorch_utils
Author: Anjandeep Singh Sahni
Author-email: sahni.anjandeep@gmail.com
License: MIT
Description-Content-Type: text/markdown
Keywords: machine-learning deep-learning pytorch neuralnetwork
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent

==========
TorchUtils
==========

.. image:: https://badge.fury.io/py/torchutils.svg
    :target: https://badge.fury.io/py/torchutils

.. image:: https://travis-ci.org/anjandeepsahni/pytorch_utils.svg?branch=master
    :target: https://travis-ci.org/anjandeepsahni/pytorch_utils

|

**TorchUtils** is a Python package providing helpful utility functions for your
PyTorch projects. TorchUtils helps speed up PyTorch development by implementing
trivial but useful functionality so that you don't have to.

Key Features
------------

* Calculate total model parameters.
* Calculate model FLOPs.
* Print model summary in Keras style.
* Save/load checkpoints.
* Get/set learning rate.
* Set random seed.

Examples
--------

Model Summary::

    import torch
    import torchvision
    import torchutils as tu

    model = torchvision.models.alexnet()
    tu.get_model_summary(model, torch.rand((1, 3, 224, 224)))

    # Output

    =========================================================================================
    Layer                           Kernel             Output          Params           FLOPs
    =========================================================================================
    0_features.Conv2d_0         [3, 64, 11, 11]    [1, 64, 55, 55]       23,296    70,470,400
    1_features.ReLU_1                         -    [1, 64, 55, 55]            0             0
    2_features.MaxPool2d_2                    -    [1, 64, 27, 27]            0             0
    3_features.Conv2d_3         [64, 192, 5, 5]   [1, 192, 27, 27]      307,392   224,088,768
    4_features.ReLU_4                         -   [1, 192, 27, 27]            0             0
    5_features.MaxPool2d_5                    -   [1, 192, 13, 13]            0             0
    6_features.Conv2d_6        [192, 384, 3, 3]   [1, 384, 13, 13]      663,936   112,205,184
    7_features.ReLU_7                         -   [1, 384, 13, 13]            0             0
    8_features.Conv2d_8        [384, 256, 3, 3]   [1, 256, 13, 13]      884,992   149,563,648
    9_features.ReLU_9                         -   [1, 256, 13, 13]            0             0
    10_features.Conv2d_10      [256, 256, 3, 3]   [1, 256, 13, 13]      590,080    99,723,520
    11_features.ReLU_11                       -   [1, 256, 13, 13]            0             0
    12_features.MaxPool2d_12                  -     [1, 256, 6, 6]            0             0
    13_classifier.Dropout_0                   -          [1, 9216]            0             0
    14_classifier.Linear_1         [9216, 4096]          [1, 4096]   37,752,832    75,493,376
    15_classifier.ReLU_2                      -          [1, 4096]            0             0
    16_classifier.Dropout_3                   -          [1, 4096]            0             0
    17_classifier.Linear_4         [4096, 4096]          [1, 4096]   16,781,312    33,550,336
    18_classifier.ReLU_5                      -          [1, 4096]            0             0
    19_classifier.Linear_6         [4096, 1000]          [1, 1000]    4,097,000     8,191,000
    =========================================================================================
    Total params: 61,100,840
    Trainable params: 61,100,840
    Non-trainable params: 0
    Total FLOPs: 773,286,232 / 773.29 MFLOPs
    -----------------------------------------------------------------------------------------
    Input size (MB): 0.57
    Forward/backward pass size (MB): 8.31
    Params size (MB): 233.08
    Estimated Total Size (MB): 241.96
    =========================================================================================

Learning Rate::

    import torchvision
    import torchutils as tu
    import torch.optim as optim

    model = torchvision.models.alexnet()
    optimizer = optim.Adam(model.parameters())
    current_lr = tu.get_lr(optimizer)
    print('Current learning rate:', current_lr)

    optimizer = tu.set_lr(optimizer, current_lr*0.1)
    revised_lr = tu.get_lr(optimizer)
    print('Revised learning rate:', revised_lr)

    # Output

    Current learning rate: 0.001
    Revised learning rate: 0.0001

Checkpoint::

    import torchvision
    import torchutils as tu
    import torch.optim as optim

    model = torchvision.models.alexnet()
    optimizer = optim.Adam(model.parameters())
    scheduler = optim.lr_scheduler.ExponentialLR(optimizer, 0.1)

    print('Original learning rate:', tu.get_lr(optimizer))

    # load checkpoint model_20190814-212442_e0_0.7531.pt
    start_epoch = tu.load_checkpoint(model_path='.',
                           ckpt_name='model_20190814-212442_e0_0.7531.pt',
                           model=model, optimizer=optimizer,
                           scheduler=scheduler)

    print('Checkpoint learning rate:', tu.get_lr(optimizer))
    print('Start from epoch:', start_epoch)

    # Output

    Original learning rate: 0.001
    Checkpoint learning rate: 0.1234
    Start epoch: 1

Requirements
------------

* Numpy >= 1.16.2
* PyTorch >= 1.0.0

Installation
------------

::

    $ pip install torchutils

Documentation
-------------
API documentation is available at: https://anjandeepsahni.github.io/torchutils/

License
-------
TorchUtils is distributed under the MIT license, see LICENSE.


