Skip to main content

import ai

AI library in python using numpy, with end-to-end reverse auto-differentiable dynamic Computational Graph. Implements general Deep Learning library components with the end API similar to that of my favourite, Pytorch.

About

Begineers in Deep Learning will find this repo useful. The purpose of this library is to serve as an educational tool, a reference guide to better understand the mechanics of deep concepts of AI by implementing everything from scratch. I want to expose the functions of Deep Learning APIs as clearly as possible. I originally built this for myself to understand Deep Learning critically, whose importance is pointed by one of favourite AI researchers Andrej Karpath, in this video.

So, as you have guessed, the best way to utilise this library is by implementing your own from scratch. Refer to this library when you don't understand how a Deep Learning component is built, tweak it and have fun :)

Features

This library implements:

  • a Parameter object - that holds the weights and gradients(wrt to a scalar quantity)
  • a Computational Graph - to store operations during forward pass, as a bfs walk in Directed Graph and execute them in reverse order during backprop. This has all the necessary functions to help realise many layers to do deep learning(activations, regularizers etc.)
  • Layers/models - the fundamental Linear layer, LSTM and RNN, Conv2d and ConvTranspose2d, BatchNorm and a generic Model template for util functions
  • Loss - Mean Square, Cross Entropy, BCELoss and few other loss functions.
  • Optimizers - basic SGD, Adam, Adagrad and Adadelta optimizer functions with choice of momentum.
  • Vsisualization tool to draw the computational graph of any program you write.
  • some example implementations using this library

I will keep updating the library with more explanations, documentation and a similar library in my favourite language, c++ soon!

Installation

This library requires Python>=3.6 and numpy. Install the library as below(Installation takes care of the dependencies):

pip install import-ai

or you could just clone this repo and work locally as below:

git clone https://github.com/srirambandi/ai.git
pip install -r requirements.txt

Usage

  1. You can directly work with Parameter objects, ComputationGraph and have fun!

(The graph engine takes care of the reverse-mode auto-differentiation - the backpropagation algorithm. It is of highest importance that you actually understand how these internal mechanics work together, that's the foremost intended purpose of this library.)

import and initiate

>>> import ai
>>> x = ai.Parameter((3, 1), eval_grad=False)
>>> W = ai.Parameter((3, 3))
>>> b = ai.Parameter((3, 1), init_zeros=True)
>>> print(W)
Parameter(shape=(3, 3), eval_grad=True) containing:
Data: [[-0.01092495  0.00542457 -0.00562512]
 [ 0.00911396 -0.00143499 -0.0160998 ]
 [-0.01601084  0.01146977  0.00797995]]

do operations

>>> y = (W @ x) + b       # supports basic arithmetic
>>> print(y)
Parameter(shape=(3, 1), eval_grad=True) containing:
Data: [[-0.00011536]
 [ 0.00012833]
 [-0.00023106]]

backward

>>> y.grad[1, 0] = 1.0
>>> y.backward()
>>> print(W.grad)
array([[ 0.        ,  0.        ,  0.        ],
       [ 0.00873683, -0.00623124, -0.00246939],
       [ 0.        ,  0.        ,  0.        ]])

see the Computational Graph for the above program

>>> ai.draw_graph(filename='linear')

Computational Graph of linear

Parameters(single circles) interact with functions(double circles) and output Parameters. The values in the circles of parameters are the node ids indexed with the bfs-walk of graph during forward pass, goes from lowest node id circle to highest node id circle. The backward pass is the same graph with edges reversed, goes from highest node id circle to lowest node id circle. The circles with None doesn't have any backward operations attached to them. The circes with red line doesn't need gradients(inputs, outputs, constants). Also, checkout some other nice renderings in the assets folder.

  1. Or a more schematic code to use in Deep Learning projects as below.
import ai


ai.manual_seed(2357)

def data_generator(file):
    yield data_batch

class Net(ai.Module):
    def __init__(self):
        self.conv = ai.Conv2d(3, 16, kernel=3, stride=1, padding=0)
        self.fc = ai.Linear(x, 10)

     def forward(self, x):
        o1 = ai.G.relu(self.conv(x))
        o2 = ai.G.dropout(ai.G.maxpool(o1), p=0.5)
        o3 = self.fc(o2)

        return ai.G.softmax(o3)

model = Net()
print(model)

L = ai.Loss('CrossEntropyLoss')
optim = ai.Optimizer(model.parameters(), optim_fn='Adam', lr=1e-3)

# inference
def evaluate():
    # testing and inference
    ai.G.grad_mode = False

    predicttion = model.forward(test_input)

    ai.G.grad_mode = True

# some control parameters

# training loop
while not converged:

    # get scores and compute gradients
    scores = model.forward(train_input)
    loss = L.loss(scores, outputs)
    loss.backward()

    # logging info

    # update weights
    optim.step()
    optim.zero_grad()


model.save()

Implementations

Examples directory contains some basic popular Deep Learning implementations, and I will add challenging ones soon.

Other examples using this library, resting in their stand-alone repos are:

Goals

To implement other learning paradigms besides Supervised such as, Unsupervised and Reinforcement Learning algorithms into the library.

I want to implement every model in the below Deep Learning Toolkit picture source tweet

DL Toolkit

License

MIT

Author

Sri Ram Bandi / @_srirambandi_

Metadata

Release files for import-ai 1.3.16

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for import-ai 1.3.16
File Interpreter ABI Platform Actions
import_ai-1.3.16-py3-none-any.whl Python 3 none any Details for import_ai-1.3.16-py3-none-any.whl

Release files / import_ai-1.3.16-py3-none-any.whl

Download URL import_ai-1.3.16-py3-none-any.whl
Size 21.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fd6eb9fc638e271f7046eff6838932e6161b2f1266d6d5a2bed569d60e38bd9e
BLAKE2b-256 checksum
How to use checksums
89ba42a333b7bfc6dd7341a3391fab6b431bd54b6e954c032a76b600cb5ac987
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/47.1.1 requests-toolbelt/0.9.1 tqdm/4.42.1 CPython/3.7.6

Security for import-ai 1.3.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page