{"id":37080203,"url":"https://github.com/shubhamwagh/picograd","last_synced_at":"2026-01-14T09:44:04.792Z","repository":{"id":61054451,"uuid":"547851306","full_name":"shubhamwagh/picograd","owner":"shubhamwagh","description":"A lightweight neural network framework implementation in Python","archived":false,"fork":false,"pushed_at":"2022-10-10T12:09:14.000Z","size":361,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-29T01:20:50.942Z","etag":null,"topics":["autograd","engine","gradengine","nn","picograd"],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/shubhamwagh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-10-08T12:22:28.000Z","updated_at":"2023-07-14T10:17:48.000Z","dependencies_parsed_at":"2022-10-09T08:33:04.233Z","dependency_job_id":null,"html_url":"https://github.com/shubhamwagh/picograd","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/shubhamwagh/picograd","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shubhamwagh%2Fpicograd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shubhamwagh%2Fpicograd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shubhamwagh%2Fpicograd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shubhamwagh%2Fpicograd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shubhamwagh","download_url":"https://codeload.github.com/shubhamwagh/picograd/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shubhamwagh%2Fpicograd/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28416120,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T08:38:59.149Z","status":"ssl_error","status_checked_at":"2026-01-14T08:38:43.588Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["autograd","engine","gradengine","nn","picograd"],"created_at":"2026-01-14T09:44:04.091Z","updated_at":"2026-01-14T09:44:04.784Z","avatar_url":"https://github.com/shubhamwagh.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Unit tests](https://github.com/shubhamwagh/picograd/actions/workflows/ci.yml/badge.svg)](https://github.com/shubhamwagh/picograd/actions/workflows/ci.yml)\n[![Build](https://github.com/shubhamwagh/picograd/actions/workflows/python-publish.yml/badge.svg)](https://github.com/shubhamwagh/picograd/actions/workflows/python-publish.yml)\n[![Python Versions](https://img.shields.io/pypi/pyversions/picograd.svg)](https://pypi.org/project/picograd)\n[![PyPI Version](https://img.shields.io/pypi/v/picograd.svg)](https://pypi.org/project/picograd)\n[![PyPI status](https://img.shields.io/pypi/status/picograd.svg)](https://pypi.python.org/project/picograd)\n\u003ch1 align=\"center\"\u003e\n  \u003cbr\u003e\n  picograd\n  \u003cbr\u003e\n\u003c/h1\u003e\n\n\u003ch4 align=\"center\"\u003eA lightweight machine learning framework\u003c/h4\u003e\n\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#description\"\u003eDescription\u003c/a\u003e •\n  \u003ca href=\"#features\"\u003eFeatures\u003c/a\u003e •\n  \u003ca href=\"#examples\"\u003eExamples\u003c/a\u003e •\n  \u003ca href=\"#references\"\u003eReferences\u003c/a\u003e •\n  \u003ca href=\"#license\"\u003eLicense\u003c/a\u003e\n\u003c/p\u003e\n\n## Description\n\nA PyTorch-like lightweight deep learning framework written from scratch in Python.\n\nThe library has a built-in auto-differentiation engine that dynamically builds a computational graph. The framework is\nbuilt with basic features to train neural nets: optimizers, training API, data utilities, metrics\nand loss functions.\nAdditional tools are developed to visualize forward computational graph.\n\n## Features\n\n- PyTorch-like auto-differentiation engine (dynamically constructed computational graph)\n- [Keras](https://keras.io/)-like simple training API\n- Neural networks API\n- Activations: ReLU, Sigmoid, tanh\n- Optimizers: SGD, Adam\n- Loss: Mean squared error\n- Accuracy: Binary accuracy\n- Data utilities\n- Computational graph visualizer\n\n## Examples\n\nThe [demo notebook](demo.ipynb) showcases what picograd is all about.\n\n### Example Usage\n\n```python\nfrom picograd.engine import Var\nfrom picograd.graph_viz import ForwardGraphViz\n\ngraph_builder = ForwardGraphViz()\n\nx = Var(1.0, label='x')\ny = (x * 2 + 1).relu();\ny.label = 'y'\ny.backward()\n\ngraph_builder.create_graph(y)\n```\n\nOutput:\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/shubhamwagh/picograd/raw/main/misc/simple_graph.png\"\u003e\n\u003c/p\u003e\n\n### Training MLP\n\n```python\nimport numpy as np\nimport matplotlib\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom sklearn.datasets import make_moons\n\nfrom picograd.nn import MLP\nfrom picograd.engine import Var\nfrom picograd.data import BatchIterator\nfrom picograd.trainer import Trainer\nfrom picograd.optim import SGD, Adam\nfrom picograd.metrics import binary_accuracy, mean_squared_error\n\n# Generate moon-shaped, non-linearly separable data\nx_train, y_train = make_moons(n_samples=200, noise=0.10, random_state=0)\n\nmodel = MLP(in_features=2, layers=[16, 16, 1], activations=['relu', 'relu', 'linear'])  # 2 hidden layers\nprint(model)\nprint(f\"Number of parameters: {len(model.parameters())}\")\n\noptimizer = SGD(model.parameters(), lr=0.05)\ndata_iterator = BatchIterator(x_train, list(map(Var, y_train)))\ntrainer = Trainer(model, optimizer, loss=mean_squared_error, acc_metric=binary_accuracy)\n\nhistory = trainer.fit(data_iterator, num_epochs=70, verbose=True)\n```\n\nDecision boundary:\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/shubhamwagh/picograd/raw/main/misc/moon_mlp.png\" width=\"460\"\u003e\n\u003c/p\u003e\n\n## References\n\n- Andrej Karpathy's [micrograd](https://github.com/karpathy/micrograd) library and intro explanation\n  on [training neural nets](https://www.youtube.com/watch?v=VMj-3S1tku0\u0026t=6246s\u0026ab_channel=AndrejKarpathy), which is the\n  foundation of **picograd**'s autograd engine.\n- Baptiste Pesquet's [pyfit](https://github.com/bpesquet/pyfit) library, from which training API was borrowed.\n\n## License\n\nMIT","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshubhamwagh%2Fpicograd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshubhamwagh%2Fpicograd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshubhamwagh%2Fpicograd/lists"}