Skip to content

Neural Networks + Visualization Tutorial

cds.ml is a from-scratch neural network library (MLP, dense layers, Adam optimizer), no PyTorch, no NumPy. Pair it with cds.data_analysis for terminal-native ASCII charts to inspect results without a plotting backend.

1. Build and train an MLP

Define the network as a list of Layers with explicit input/output sizes and activations.

from cds.ml import MLP, Layer

# XOR-like logic: input [x1, x2] -> output [x1 OR x2]
X = [[0.0, 0.0], [0.0, 1.0], [1.0, 0.0], [1.0, 1.0]]
y = [[0.0], [1.0], [1.0], [1.0]]

net = MLP(
    [
        Layer(2, 4, activation="relu"),
        Layer(4, 1, activation="sigmoid"),
    ]
)

Before training the outputs sit near 0.5 (random init):

Initial predictions (Untrained):
  In: [0.0, 0.0] -> Out: 0.5000
  In: [0.0, 1.0] -> Out: 0.3825
  ...

Train with the built-in Adam optimizer (momentum state persisted across steps):

history = net.train(X, y, epochs=200, lr=0.1)
print(f"Final loss: {history['final_loss']}")

After 200 epochs the network has learned the OR function:

Final predictions (Trained):
  In: [0.0, 0.0] -> Out: 0.0406
  In: [0.0, 1.0] -> Out: 0.9908
  In: [1.0, 0.0] -> Out: 0.9915
  In: [1.0, 1.0] -> Out: 1.0000

history carries final_loss, iterations, and a converged flag so you can decide programmatically whether to keep training.

2. Visualize results in the terminal

cds.data_analysis ships plot_bar and plot_line, scale-aware ASCII charts that need no matplotlib.

from cds.data_analysis import plot_bar, plot_line
import math

stats = {"Quantum": 95.5, "Signals": 88.2, "Math": 92.0, "ML": 99.1}
print(plot_bar(stats, title="Module Readiness Score"))

wave = [math.sin(x * 0.2) for x in range(50)]
print(plot_line(wave, title="Generated Sine Wave (ASCII)"))
Module Readiness Score
──────────────────────
Quantum  | ████████████████████████████████████████████████ (+95.50)
Signals  | ████████████████████████████████████████████ (+88.20)
...

The line plot auto-scales to [min, max] and renders with markers, so you can eyeball loss curves or signal shapes straight from a terminal.

3. The pure-Python advantage

Because every layer, optimizer step, and chart is readable Python, this is an ideal setup for teaching how backpropagation and Adam actually work, you can set breakpoints inside the training loop and watch gradients flow.

Run the full demo:

python examples/ml_and_viz_demo.py