{"id":16346385,"url":"https://github.com/milesgranger/pyrus-nn","last_synced_at":"2025-03-20T23:32:43.024Z","repository":{"id":48511473,"uuid":"169406515","full_name":"milesgranger/pyrus-nn","owner":"milesgranger","description":"Lightweight, easy to use, micro neural network framework written in Rust w/ no python dependencies","archived":false,"fork":false,"pushed_at":"2021-07-22T04:17:11.000Z","size":72,"stargazers_count":15,"open_issues_count":7,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-17T18:53:50.623Z","etag":null,"topics":["machine-learning","neural-network","neural-networks-from-scratch","python","rust","rust-lang"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/milesgranger.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":"2019-02-06T13:00:20.000Z","updated_at":"2024-02-08T09:13:59.000Z","dependencies_parsed_at":"2022-07-26T13:02:10.006Z","dependency_job_id":null,"html_url":"https://github.com/milesgranger/pyrus-nn","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/milesgranger%2Fpyrus-nn","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/milesgranger%2Fpyrus-nn/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/milesgranger%2Fpyrus-nn/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/milesgranger%2Fpyrus-nn/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/milesgranger","download_url":"https://codeload.github.com/milesgranger/pyrus-nn/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244711713,"owners_count":20497415,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["machine-learning","neural-network","neural-networks-from-scratch","python","rust","rust-lang"],"created_at":"2024-10-11T00:35:14.090Z","updated_at":"2025-03-20T23:32:42.750Z","avatar_url":"https://github.com/milesgranger.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# pyrus-nn\n\n[![Build Status](https://milesgranger.visualstudio.com/builds/_apis/build/status/pyrus-nn?branchName=master)](https://milesgranger.visualstudio.com/builds/_build/latest?definitionId=1\u0026branchName=master)\n[![Dependabot Status](https://api.dependabot.com/badges/status?host=github\u0026repo=milesgranger/black-jack)](https://dependabot.com)\n[![crates.io](http://meritbadge.herokuapp.com/pyrus-nn)](https://crates.io/crates/pyrus-nn)\n\n[Rust API Documentation](https://docs.rs/pyrus-nn)\n\nLightweight neural network framework written in Rust, with _thin_ python bindings.\n\n- Features:\n    - Serialize networks into/from YAML \u0026 JSON!\n        - Rust -\u003e serde compatible\n        - Python -\u003e `network.to_dict()` \u0026 `Sequential.from_dict()`\n    - Python install requires _zero_ dependencies\n    - No external system libs to install \n    \n- Draw backs:\n    - Only supports generic gradient descent. \n    - Fully connected (Dense) layers only so far\n    - Activation functions limited to linear, tanh, sigmoid and softmax\n    - Cost functions limited to MSE, MAE, Cross Entropy and Accuracy\n    \n### Install:\n\nPython:\n```\npip install pyrus-nn  # Has ZERO dependencies!\n```\n\nRust:\n```toml\n[dependencies]\npyrus-nn = \"0.2.1\"\n```\n\n\n\n### From Python\n```python\nfrom pyrus_nn.models import Sequential\nfrom pyrus_nn.layers import Dense\n\nmodel = Sequential(lr=0.001, n_epochs=10)\nmodel.add(Dense(n_input=12, n_output=24, activation='sigmoid'))\nmodel.add(Dense(n_input=24, n_output=1, activation='sigmoid'))\n\n# Create some X and y, each of which must be 2d\nX = [list(range(12)) for _ in range(10)]\ny = [[i] for i in range(10)]  \n\nmodel.fit(X, y)\nout = model.predict(X)\n\n```\n\n---\n\n### From Rust\n```rust\nuse ndarray::Array2;\nuse pyrus_nn::{network::Sequential, layers::Dense};\n\n\n// Network with 4 inputs and 1 output.\nfn main() {\n    let mut network = Sequential::new(0.001, 100, 32, CostFunc::CrossEntropy);\n    assert!(\n        network.add(Dense::new(4, 5)).is_ok()\n    );\n    assert!(\n        network.add(Dense::new(5, 6)).is_ok()\n    );\n    assert!(\n        network.add(Dense::new(6, 4)).is_ok()\n    );\n    assert!(\n        network.add(Dense::new(4, 1)).is_ok()\n    );\n    \n    let X: Array2\u003cf32\u003e = ...\n    let y: Array2\u003cf32\u003e = ...\n    \n    network.fit(X.view(), y.view());\n    \n    let yhat: Array2\u003cf32\u003e = network.predict(another_x.view());\n}\n\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmilesgranger%2Fpyrus-nn","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmilesgranger%2Fpyrus-nn","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmilesgranger%2Fpyrus-nn/lists"}