https://github.com/jwcarman/netwerx
A lightweight, extensible deep learning library for Java
https://github.com/jwcarman/netwerx
ai autoencoders binary-classification machine-learning multi-class-classification neural-networks regression-models
Last synced: 3 months ago
JSON representation
A lightweight, extensible deep learning library for Java
- Host: GitHub
- URL: https://github.com/jwcarman/netwerx
- Owner: jwcarman
- License: apache-2.0
- Created: 2025-04-28T22:59:27.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-05-29T01:42:46.000Z (about 1 year ago)
- Last Synced: 2025-06-29T11:03:24.195Z (11 months ago)
- Topics: ai, autoencoders, binary-classification, machine-learning, multi-class-classification, neural-networks, regression-models
- Language: Java
- Homepage:
- Size: 12.6 MB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Netwerx

[](https://github.com/jwcarman/netwerx/actions/workflows/maven.yml)
[](https://sonarcloud.io/summary/new_code?id=jwcarman_netwerx)

[](https://sonarcloud.io/summary/new_code?id=jwcarman_netwerx)
[](https://sonarcloud.io/summary/new_code?id=jwcarman_netwerx)
[](https://sonarcloud.io/summary/new_code?id=jwcarman_netwerx)
[](https://sonarcloud.io/summary/new_code?id=jwcarman_netwerx)
[](https://sonarcloud.io/summary/new_code?id=jwcarman_netwerx)
[](https://sonarcloud.io/summary/new_code?id=jwcarman_netwerx)
---
**Netwerx** is a lightweight, extensible deep learning library for Java 23+.
Itโ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.
---
## ๐ Table of Contents
* [โจ Features](#-features)
* [๐ Quickstart](#-quickstart)
* [๐ Core Concepts](#-core-concepts)
* [๐ Activation Functions](#-activation-functions)
* [โ๏ธ Optimizers](#๏ธ-optimizers)
* [๐ฏ Loss Functions](#-loss-functions)
* [๐งช Training Executors](#-training-executors)
* [๐ Scoring Functions](#-scoring-functions)
* [โน Early Stopping (Stopping Advisors)](#-early-stopping-stopping-advisors)
* [๐ก Regularization](#-regularization)
* [๐ Parameter Initialization](#-parameter-initialization)
* [๐ฃ Training Listeners](#-training-listeners)
* [๐ง Model Types](#-model-types)
* [๐งฎ Matrix Abstraction](#-matrix-abstraction)
* [๐งช Titanic Example](#-titanic-example)
* [๐ง Extending Netwerx](#-extending-netwerx)
* [๐ค Roadmap](#-roadmap)
* [๐ค Contributing](#-contributing)
* [๐ License](#-license)
* [๐ Acknowledgements](#-acknowledgements)
---
## โจ Features
* Fully connected feed-forward networks
* Binary/multi-class classifiers, regressors, autoencoders
* Mini-batch or full-batch training
* Dropout support for regularization
* Modular components (optimizers, activations, loss functions, etc.)
* Pluggable matrix backend
* Lightweight โ depends only on EJML
* Training listeners and early stopping
* Reproducibility with pluggable random sources
---
## ๐ Quickstart
```java
var trainer = new DefaultNeuralNetworkTrainerBuilder<>(factory, 5)
.defaultOptimizer(() -> Optimizers.adam(0.01))
.denseLayer(layer -> layer.units(8).activationFunction(ActivationFunctions.relu()))
.denseLayer(layer -> layer.units(1).activationFunction(ActivationFunctions.sigmoid()))
.buildBinaryClassifierTrainer();
var trainFeatures = factory.filled(5, 10, 0.5);
var trainLabels = factory.filled(1, 10, 1.0);
var dataset = new Dataset<>(trainFeatures, trainLabels);
var network = trainer.train(dataset);
```
---
## ๐ Core Concepts
* **Activation Functions** โ introduce non-linearity into your network
* **Regularization** โ penalize model complexity
* **Loss Functions** โ define how wrong your model is
* **Optimizers** โ control how weights are updated
* **Training Executors** โ manage batching and parallel execution
* **Scoring Functions** โ evaluate training progress
* **Stopping Advisors** โ control when training halts
* **Parameter Initialization** โ choose sensible starting points for weights and biases
* **Training Listeners** โ observe and respond to training events
* **Matrix Abstraction** โ plug in your own backend
---
## ๐ Activation Functions
Netwerx supports ReLU, Sigmoid, Tanh, LeakyReLU, Softmax, and Linear. You can plug in your own:
```java
var relu = ActivationFunctions.relu();
var custom = (ActivationFunction) (input) -> ...
```
---
## โ๏ธ Optimizers
Optimizers update your weights each step:
* **SGD** โ basic gradient descent
* **Momentum** โ adds inertia
* **Adam** โ adaptive learning rate + momentum
* **RMSProp** โ adaptive learning rate only
```java
Optimizers.adam(0.01, 0.9, 0.999, 1e-8);
```
---
## ๐ฏ Loss Functions
Use a loss function suited to your task:
* **MSE** โ regression
* **MAE** โ regression
* **Binary Cross Entropy** โ binary classification
* **Categorical Cross Entropy** โ multi-class
* **Hinge** โ SVM-style classifiers
```java
LossFunctions.bce();
```
---
## ๐งช Training Executors
Training executors handle how training samples are fed to the network:
* **Full Batch**: use entire dataset each epoch
* **Mini Batch**: configurable size, shuffling, and parallelism
```java
TrainingExecutors.miniBatch(32, new Random(), Executors.newFixedThreadPool(4));
```
---
## ๐ Scoring Functions
Scoring functions monitor progress, typically by evaluating validation loss or accuracy. Use one of ours or create your own:
```java
ScoringFunctions.validationLoss();
```
---
## โน Early Stopping (Stopping Advisors)
Stop training when it's no longer improving:
* **Max Epochs**
* **Score Threshold**
* **Patience**
```java
StoppingAdvisors.patience(10, 1e-4);
```
---
## ๐ก Regularization
Avoid overfitting by penalizing weights:
* **L1** (sparsity)
* **L2** (shrinkage)
* **Elastic Net** (combines both)
```java
Regularizations.l2(1e-4);
```
---
## ๐ Parameter Initialization
Choose how weights and biases are initialized:
```java
ParameterInitializers.heUniform();
ParameterInitializers.zeros();
```
---
## ๐ฃ Training Listeners
Attach listeners to monitor progress:
```java
TrainingListeners.logging(logger, 100);
```
Custom listeners can log metrics, write to disk, update UIs, etc.
---
## ๐ง Model Types
Netwerx supports:
* **BinaryClassifierTrainer** โ one output, sigmoid, BCE loss
* **MultiClassifierTrainer** โ softmax, categorical loss
* **RegressionTrainer** โ identity output, MSE/MAE
* **AutoencoderTrainer** โ encoder/decoder pattern with MSE loss
---
## ๐งฎ Matrix Abstraction
All computations are built on a pluggable matrix abstraction:
```java
Matrix matrix = factory.random(rows, cols);
```
Plug in your own backend (e.g., EJML, ND4J) by implementing `Matrix`.
---
## ๐งช Titanic Example
A binary classifier predicts Titanic survival:
* Input: class, age, sex, fare, family members
* Layers: \[8 โ 4 โ 1]
* Activation: ReLU + Sigmoid
* Loss: Binary Cross Entropy
* Optimizer: SGD
```java
Accuracy: ~83%, F1 Score: 0.75
```
---
## ๐ง Extending Netwerx
| You want to... | Implement... |
| ---------------------- | ------------------------------------- |
| Add an activation | `ActivationFunction` |
| Add a loss function | `LossFunction` |
| Create an optimizer | `Optimizer` |
| Add scoring/early stop | `ScoringFunction` / `StoppingAdvisor` |
| Monitor training | `TrainingListener` |
---
## ๐ค Roadmap
* [x] Binary/Multi/Regression/Autoencoder Trainers
* [x] Dropout support
* [x] Mini-batch + parallel execution
* [x] Early stopping (patience, score threshold)
* [x] Adam, RMSProp, Momentum
* [x] Xavier, He initialization
* [ ] Model serialization
* [x] Learning rate schedulers
* [ ] CNN, RNN layer support
* [ ] Visual training dashboards
---
## ๐ค Contributing
Have an idea? Found a bug? Contributions are welcome!
* Fork, branch, submit PRs
* Add your own trainers, layers, components
* Suggest improvements via Issues
---
## ๐ License
Licensed under [Apache License 2.0](LICENSE)
---
## ๐ Acknowledgements
Inspired by:
* PyTorch
* Keras
* TensorFlow
Built from scratch for Java developers who want to deeply understand whatโs happening in a neural network.
---
# ๐ง Build neural networks. Understand them deeply. With **Netwerx**.