{"id":29112767,"url":"https://github.com/jwcarman/netwerx","last_synced_at":"2026-03-10T13:05:00.750Z","repository":{"id":290460140,"uuid":"974521373","full_name":"jwcarman/netwerx","owner":"jwcarman","description":"A lightweight, extensible deep learning library for Java","archived":false,"fork":false,"pushed_at":"2025-05-29T01:42:46.000Z","size":13179,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-29T11:03:24.195Z","etag":null,"topics":["ai","autoencoders","binary-classification","machine-learning","multi-class-classification","neural-networks","regression-models"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jwcarman.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-04-28T22:59:27.000Z","updated_at":"2025-05-29T01:42:49.000Z","dependencies_parsed_at":"2025-04-29T00:35:17.591Z","dependency_job_id":"a77937c9-7a4a-4347-ba19-45e8ac31b8f8","html_url":"https://github.com/jwcarman/netwerx","commit_stats":null,"previous_names":["jwcarman/netwerx"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jwcarman/netwerx","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwcarman%2Fnetwerx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwcarman%2Fnetwerx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwcarman%2Fnetwerx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwcarman%2Fnetwerx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jwcarman","download_url":"https://codeload.github.com/jwcarman/netwerx/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwcarman%2Fnetwerx/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30334412,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T12:41:07.687Z","status":"ssl_error","status_checked_at":"2026-03-10T12:41:06.728Z","response_time":106,"last_error":"SSL_read: 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":["ai","autoencoders","binary-classification","machine-learning","multi-class-classification","neural-networks","regression-models"],"created_at":"2025-06-29T11:03:25.577Z","updated_at":"2026-03-10T13:05:00.734Z","avatar_url":"https://github.com/jwcarman.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Netwerx\n![Maven Central Version](https://img.shields.io/maven-central/v/org.jwcarman.netwerx/netwerx)\n\n[![CI with Maven](https://github.com/jwcarman/netwerx/actions/workflows/maven.yml/badge.svg)](https://github.com/jwcarman/netwerx/actions/workflows/maven.yml)\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=jwcarman_netwerx\u0026metric=alert_status)](https://sonarcloud.io/summary/new_code?id=jwcarman_netwerx)\n![License](https://img.shields.io/badge/License-Apache_2.0-blue)\n\n[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=jwcarman_netwerx\u0026metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=jwcarman_netwerx)\n[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=jwcarman_netwerx\u0026metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=jwcarman_netwerx)\n[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=jwcarman_netwerx\u0026metric=security_rating)](https://sonarcloud.io/summary/new_code?id=jwcarman_netwerx)\n[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=jwcarman_netwerx\u0026metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=jwcarman_netwerx)\n[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=jwcarman_netwerx\u0026metric=coverage)](https://sonarcloud.io/summary/new_code?id=jwcarman_netwerx)\n[![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=jwcarman_netwerx\u0026metric=ncloc)](https://sonarcloud.io/summary/new_code?id=jwcarman_netwerx)\n\n\n---\n\n**Netwerx** is a lightweight, extensible deep learning library for Java 23+.\n\nIt’s designed for learning, prototyping, and research — with full transparency into what your neural network is doing under the hood. No magic, no black boxes.\n\n---\n\n## 📑 Table of Contents\n\n* [✨ Features](#-features)\n* [🚀 Quickstart](#-quickstart)\n* [📚 Core Concepts](#-core-concepts)\n* [🔌 Activation Functions](#-activation-functions)\n* [⚙️ Optimizers](#️-optimizers)\n* [🎯 Loss Functions](#-loss-functions)\n* [🧪 Training Executors](#-training-executors)\n* [📊 Scoring Functions](#-scoring-functions)\n* [⏹ Early Stopping (Stopping Advisors)](#-early-stopping-stopping-advisors)\n* [🛡 Regularization](#-regularization)\n* [🎛 Parameter Initialization](#-parameter-initialization)\n* [📣 Training Listeners](#-training-listeners)\n* [🧠 Model Types](#-model-types)\n* [🧮 Matrix Abstraction](#-matrix-abstraction)\n* [🧪 Titanic Example](#-titanic-example)\n* [🔧 Extending Netwerx](#-extending-netwerx)\n* [🛤 Roadmap](#-roadmap)\n* [🤝 Contributing](#-contributing)\n* [📄 License](#-license)\n* [🙏 Acknowledgements](#-acknowledgements)\n\n---\n\n## ✨ Features\n\n* Fully connected feed-forward networks\n* Binary/multi-class classifiers, regressors, autoencoders\n* Mini-batch or full-batch training\n* Dropout support for regularization\n* Modular components (optimizers, activations, loss functions, etc.)\n* Pluggable matrix backend\n* Lightweight — depends only on EJML\n* Training listeners and early stopping\n* Reproducibility with pluggable random sources\n\n---\n\n## 🚀 Quickstart\n\n```java\nvar trainer = new DefaultNeuralNetworkTrainerBuilder\u003c\u003e(factory, 5)\n        .defaultOptimizer(() -\u003e Optimizers.adam(0.01))\n        .denseLayer(layer -\u003e layer.units(8).activationFunction(ActivationFunctions.relu()))\n        .denseLayer(layer -\u003e layer.units(1).activationFunction(ActivationFunctions.sigmoid()))\n        .buildBinaryClassifierTrainer();\n\nvar trainFeatures = factory.filled(5, 10, 0.5);\nvar trainLabels = factory.filled(1, 10, 1.0);\nvar dataset = new Dataset\u003c\u003e(trainFeatures, trainLabels);\nvar network = trainer.train(dataset);\n```\n\n---\n\n## 📚 Core Concepts\n\n* **Activation Functions** — introduce non-linearity into your network\n* **Regularization** — penalize model complexity\n* **Loss Functions** — define how wrong your model is\n* **Optimizers** — control how weights are updated\n* **Training Executors** — manage batching and parallel execution\n* **Scoring Functions** — evaluate training progress\n* **Stopping Advisors** — control when training halts\n* **Parameter Initialization** — choose sensible starting points for weights and biases\n* **Training Listeners** — observe and respond to training events\n* **Matrix Abstraction** — plug in your own backend\n\n---\n\n## 🔌 Activation Functions\n\nNetwerx supports ReLU, Sigmoid, Tanh, LeakyReLU, Softmax, and Linear. You can plug in your own:\n\n```java\nvar relu = ActivationFunctions.relu();\nvar custom = (ActivationFunction) (input) -\u003e ...\n```\n\n---\n\n## ⚙️ Optimizers\n\nOptimizers update your weights each step:\n\n* **SGD** — basic gradient descent\n* **Momentum** — adds inertia\n* **Adam** — adaptive learning rate + momentum\n* **RMSProp** — adaptive learning rate only\n\n```java\nOptimizers.adam(0.01, 0.9, 0.999, 1e-8);\n```\n\n---\n\n## 🎯 Loss Functions\n\nUse a loss function suited to your task:\n\n* **MSE** — regression\n* **MAE** — regression\n* **Binary Cross Entropy** — binary classification\n* **Categorical Cross Entropy** — multi-class\n* **Hinge** — SVM-style classifiers\n\n```java\nLossFunctions.bce();\n```\n\n---\n\n## 🧪 Training Executors\n\nTraining executors handle how training samples are fed to the network:\n\n* **Full Batch**: use entire dataset each epoch\n* **Mini Batch**: configurable size, shuffling, and parallelism\n\n```java\nTrainingExecutors.miniBatch(32, new Random(), Executors.newFixedThreadPool(4));\n```\n\n---\n\n## 📊 Scoring Functions\n\nScoring functions monitor progress, typically by evaluating validation loss or accuracy. Use one of ours or create your own:\n\n```java\nScoringFunctions.validationLoss();\n```\n\n---\n\n## ⏹ Early Stopping (Stopping Advisors)\n\nStop training when it's no longer improving:\n\n* **Max Epochs**\n* **Score Threshold**\n* **Patience**\n\n```java\nStoppingAdvisors.patience(10, 1e-4);\n```\n\n---\n\n## 🛡 Regularization\n\nAvoid overfitting by penalizing weights:\n\n* **L1** (sparsity)\n* **L2** (shrinkage)\n* **Elastic Net** (combines both)\n\n```java\nRegularizations.l2(1e-4);\n```\n\n---\n\n## 🎛 Parameter Initialization\n\nChoose how weights and biases are initialized:\n\n```java\nParameterInitializers.heUniform();\nParameterInitializers.zeros();\n```\n\n---\n\n## 📣 Training Listeners\n\nAttach listeners to monitor progress:\n\n```java\nTrainingListeners.logging(logger, 100);\n```\n\nCustom listeners can log metrics, write to disk, update UIs, etc.\n\n---\n\n## 🧠 Model Types\n\nNetwerx supports:\n\n* **BinaryClassifierTrainer** — one output, sigmoid, BCE loss\n* **MultiClassifierTrainer** — softmax, categorical loss\n* **RegressionTrainer** — identity output, MSE/MAE\n* **AutoencoderTrainer** — encoder/decoder pattern with MSE loss\n\n---\n\n## 🧮 Matrix Abstraction\n\nAll computations are built on a pluggable matrix abstraction:\n\n```java\nMatrix\u003cM\u003e matrix = factory.random(rows, cols);\n```\n\nPlug in your own backend (e.g., EJML, ND4J) by implementing `Matrix\u003cM\u003e`.\n\n---\n\n## 🧪 Titanic Example\n\nA binary classifier predicts Titanic survival:\n\n* Input: class, age, sex, fare, family members\n* Layers: \\[8 → 4 → 1]\n* Activation: ReLU + Sigmoid\n* Loss: Binary Cross Entropy\n* Optimizer: SGD\n\n```java\nAccuracy: ~83%, F1 Score: 0.75\n```\n\n---\n\n## 🔧 Extending Netwerx\n\n| You want to...         | Implement...                          |\n| ---------------------- | ------------------------------------- |\n| Add an activation      | `ActivationFunction`                  |\n| Add a loss function    | `LossFunction`                        |\n| Create an optimizer    | `Optimizer`                           |\n| Add scoring/early stop | `ScoringFunction` / `StoppingAdvisor` |\n| Monitor training       | `TrainingListener`                    |\n\n---\n\n## 🛤 Roadmap\n\n* [x] Binary/Multi/Regression/Autoencoder Trainers\n* [x] Dropout support\n* [x] Mini-batch + parallel execution\n* [x] Early stopping (patience, score threshold)\n* [x] Adam, RMSProp, Momentum\n* [x] Xavier, He initialization\n* [ ] Model serialization\n* [x] Learning rate schedulers\n* [ ] CNN, RNN layer support\n* [ ] Visual training dashboards\n\n---\n\n## 🤝 Contributing\n\nHave an idea? Found a bug? Contributions are welcome!\n\n* Fork, branch, submit PRs\n* Add your own trainers, layers, components\n* Suggest improvements via Issues\n\n---\n\n## 📄 License\n\nLicensed under [Apache License 2.0](LICENSE)\n\n---\n\n## 🙏 Acknowledgements\n\nInspired by:\n\n* PyTorch\n* Keras\n* TensorFlow\n\nBuilt from scratch for Java developers who want to deeply understand what’s happening in a neural network.\n\n---\n\n# 🧠 Build neural networks. Understand them deeply. With **Netwerx**.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjwcarman%2Fnetwerx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjwcarman%2Fnetwerx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjwcarman%2Fnetwerx/lists"}