{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "2521b2aa",
   "metadata": {},
   "source": [
    "# Training on Tasks\n",
    "\n",
    "Fitting tunes a handful of parameters to reproduce one observation. **Training** is the\n",
    "data-driven sibling: optimise *all* of a network's weights, over many input/target pairs, for\n",
    "many epochs, so the network learns to perform a **task**. Because brainmass networks are\n",
    "differentiable, the same backpropagation that fit a single parameter in\n",
    "{doc}`/tutorials/06_fitting_with_gradients` scales to training a recurrent network.\n",
    "\n",
    "In this tutorial we train a {class}`~brainmass.HORNSeqNetwork` -- a recurrent network of\n",
    "harmonic oscillators -- on the bundled **delayed match-to-sample** task. The network sees a cue,\n",
    "then (after a delay) a probe, and must decide whether they match. You will:\n",
    "\n",
    "1. load the task from {mod}`brainmass.datasets`,\n",
    "2. build a HORN classifier and a cross-entropy task loss,\n",
    "3. optimise its weights over epochs/mini-batches with a `braintools.optim` optimiser, and\n",
    "4. watch the train/test accuracy climb from chance to near-perfect.\n",
    "\n",
    ":::{note}\n",
    "{class}`~brainmass.Fitter` targets *parameter fitting* against a single fixed target. **Task\n",
    "training** -- minibatching `(inputs, targets)` pairs over epochs, tracking a held-out metric --\n",
    "is a different loop, so here we drive the {mod}`braintools.optim` optimiser directly. The\n",
    "**Lessons** at the bottom note this as the gap that a future `Trainer` would close.\n",
    ":::"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "ad9b5931",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-19T07:12:56.792893Z",
     "iopub.status.busy": "2026-06-19T07:12:56.792680Z",
     "iopub.status.idle": "2026-06-19T07:13:02.244558Z",
     "shell.execute_reply": "2026-06-19T07:13:02.243406Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "An NVIDIA GPU may be present on this machine, but a CUDA-enabled jaxlib is not installed. Falling back to cpu.\n"
     ]
    }
   ],
   "source": [
    "import brainmass\n",
    "import brainstate\n",
    "import braintools\n",
    "import brainunit as u\n",
    "import jax\n",
    "import jax.numpy as jnp\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "brainstate.environ.set(dt=1.0 * u.ms)\n",
    "brainstate.random.seed(0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2198b980",
   "metadata": {},
   "source": [
    "## The task\n",
    "\n",
    "{func}`brainmass.datasets.delayed_match_task` synthesises a delayed match-to-sample dataset. At\n",
    "each trial a one-hot **cue** symbol is presented at the first time step; after a delay of blank\n",
    "steps a one-hot **probe** appears at the last step. The binary target is `1` if the probe\n",
    "matches the cue and `0` otherwise -- the network must hold the cue in its dynamics across the\n",
    "delay and compare. We use a 2-symbol alphabet and an 8-step sequence."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "47088816",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-19T07:13:02.247661Z",
     "iopub.status.busy": "2026-06-19T07:13:02.247162Z",
     "iopub.status.idle": "2026-06-19T07:13:02.549963Z",
     "shell.execute_reply": "2026-06-19T07:13:02.549161Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "inputs : (320, 8, 2) float64   (n_samples, seq_len, n_symbols)\n",
      "targets: (320,) int64  balance = 0.5\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA3kAAAEiCAYAAABEJhvIAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAALWhJREFUeJzt3Xl4VPW9x/HPJCQhIQs7ISwJi4KgYGQzLAaES0CgpVYWlRpQEG0QULki3iq4QStFqEoR6L1BsYiCAlorOwQFKZoUN4oagUgBCQJZgBhK5nf/8GFkSCCTySRn5vB+PU8eycmZM58zwfnwnTPnjMMYYwQAAAAAsIUgqwMAAAAAAHyHIQ8AAAAAbIQhDwAAAABshCEPAAAAAGyEIQ8AAAAAbIQhDwAAAABshCEPAAAAAGyEIQ8AAAAAbIQhDwAAAABshCEPlnM4HJoxY0aFb7d161Y5HA5t3brV55n8Se/evXXttddWybZvueUWjRs3rkq2bXdr165VZGSkjh07ZnUUAFWEfgo8dKZ/evnll9W8eXMVFxdbHeWKwZAHn9mxY4dmzJihvLw8q6P4lT179mjGjBk6cOCA1VHcbN++XevXr9fUqVNdy/w166VURd7169frnnvu0bXXXqvg4GAlJCSUud6AAQPUunVrzZo1y2f3DaBq0E+Bw197iM68tB07dqhnz56KiIhQbGysJk6cqFOnTrmtM3r0aJ09e1YLFy706X3j0hjy4DM7duzQk08+WeESLSoq0u9+97uqCeUH9uzZoyeffNLvSmD27Nnq27evWrdu7Vrmr1kvpSryLlu2TMuWLVNMTIzi4uIuu+748eO1cOFCFRYW+uz+Afge/RQ4/LWH6Myy7d69W3379tWZM2f0/PPPa+zYsVq0aJGGDRvmtl7NmjWVmpqq559/XsYYn90/Lo0hD5ZwOp368ccfJf30P36NGjUsTnRlyc3N1Xvvvafhw4dXy/2dOXOmWu7HF2bOnKmCggJt375dHTt2vOy6v/71r1VcXKwVK1ZUUzoAVY1+wsXozEt77LHHVKdOHW3dulX33XefnnnmGb300ktau3at1q9f77bu8OHDlZOToy1btliU9srCkAefmDFjhv77v/9bktSiRQs5HA45HA7Xq0UOh0MTJkzQX//6V7Vv315hYWFau3at62cXnvOQk5Oj3/72t2rTpo3Cw8NVr149DRs2zKNXns6cOaO9e/fqhx9+KHfd8+/b/+yzz5ScnKyIiAi1bt1aK1eulCRlZGSoW7duCg8PV5s2bbRx40a323uSc8mSJa5Xs/r06eN6XC48T+P9999XcnKyoqKiFB0drS5dumjZsmWl8u7Zs0d9+vRRRESEmjRpoueee67cfbyU9957T+fOnVO/fv08zrpmzRoNGjRIcXFxCgsLU6tWrfT000+rpKSkzMc1MzNTN910kyIiIvTYY49Jko4fP67f/OY3io6OVu3atZWamqpPP/1UDodDS5YscdvO3r17ddttt6lu3bqqWbOmOnfurHfeeadCj6034uLiFBIS4tG6DRs2VIcOHbRmzZpK3SeAqhPI/eTJ835ubq7uueceNWrUSDVr1lTHjh31yiuvuK1z4MABORwO/fGPf9SiRYvUqlUrhYWFqUuXLvr444/LzXNhJjrTs6xXQmcWFBRow4YNGjVqlKKjo13L77rrLkVGRurNN990W79Tp06qW7cunVlNeHkKPnHrrbfq66+/1uuvv665c+eqfv36kqQGDRq41tm8ebPefPNNTZgwQfXr17/kuU4ff/yxduzYoZEjR6pp06Y6cOCAFixYoN69e2vPnj2KiIi4ZI5du3apT58+mj59ukcny588eVKDBw/WyJEjNWzYMC1YsEAjR47UX//6V02ePFn33Xef7rjjDs2ePVu33XabDh48qKioKI9z3nTTTZo4caJeeOEFPfbYY7rmmmskyfXfJUuW6O6771b79u01bdo01a5dW//85z+1du1a3XHHHW45BwwYoFtvvVXDhw/XypUrNXXqVF133XUaOHBguft5sR07dqhevXqKj493LfMka2RkpB566CFFRkZq8+bNeuKJJ1RQUKDZs2e7bf/48eMaOHCgRo4cqVGjRqlRo0ZyOp0aMmSIdu3apfvvv19t27bVmjVrlJqaWirfl19+qR49eqhJkyZ69NFHVatWLb355psaOnSo3nrrLf3qV78qN++pU6dcr8ZfTkhIiGJiYir8GJ7XqVMnrV692uvbA6hagdxP5T3vFxUVqXfv3srOztaECRPUokULrVixQqNHj1ZeXp4mTZrkts1ly5apsLBQ48ePl8Ph0HPPPadbb71V+/bt8+jFLTqTzrywMz///HOdO3dOnTt3dlsnNDRU119/vf75z3+Wuv0NN9yg7du3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evRo13bj4+NNVFSUmTVrlvnqq6/MCy+8YIKDg8369eur6JEFAPgDeo6eQ2BhyAN8JDk52UyaNMltWVnlJ8lkZ2e71hk/fryJiIgwhYWFrmUpKSlm/PjxxhhjcnJyTHBwsDl06JDbtvv27WumTZtWZpY5c+aYq6++2pw9e7bMn8fHx5u5c+e6LbvnnnvMvffe67bsgw8+MEFBQaaoqMh1uwEDBritM2LECDNw4MAy7wcAYB/0HBA4eLsmUM0iIiLUqlUr1/eNGjVSQkKCIiMj3Zbl5uZKkj7//HOVlJTo6quvVmRkpOsrIyND3377bZn3MWzYMBUVFally5YaN26cVq1apXPnzl0216effqolS5a43UdKSoqcTqf279/vWi8pKcntdklJSfrXv/5V4ccBAGBP9BxgPS68AlSzkJAQt+8dDkeZy5xOpyTp1KlTCg4OVmZmpoKDg93Wu7AwL9SsWTN99dVX2rhxozZs2KDf/va3mj17tjIyMkrd13mnTp3S+PHjXec0XKh58+Ye7x8A4MpGzwHWY8gDfCQ0NNTtJHJfSUxMVElJiXJzc9WrVy+PbxceHq4hQ4ZoyJAhSktLU9u2bfX555/rhhtuKDPrDTfcoD179qh169aX3e7OnTtLfX/NNdd4vkMAgIBEzwGBgyEP8JGEhAT94x//0IEDBxQZGam6dev6ZLtXX3217rzzTt11112aM2eOEhMTdezYMW3atEkdOnTQoEGDSt1myZIlKikpUbdu3RQREaHXXntN4eHhio+Pd2Xdtm2bRo4cqbCwMNWvX19Tp07VjTfeqAkTJmjs2LGqVauW9uzZow0bNuill15ybXv79u167rnnNHToUG3YsEErVqzQe++955N9BQD4L3oOCByckwf4yJQpUxQcHKx27dqpQYMG+u6773y27fT0dN111116+OGH1aZNGw0dOlQff/zxJd9eUrt2bS1evFg9evRQhw4dtHHjRr377ruqV6+eJOmpp57SgQMH1KpVKzVo0ECS1KFDB2VkZOjrr79Wr169lJiYqCeeeEJxcXFu23744Yf1ySefKDExUc8884yef/55paSk+GxfAQD+iZ4DAofDGGOsDgEgMCQkJGjy5MmaPHmy1VEAAPA5eg52wZE8AAAAALARhjwAAAAAsBHergkAAAAANsKRPAAAAACwEYY8AAAAALARhjwAAAAAsBGGPAAAAACwEYY8AAAAALARhjwAAAAAsBGGPAAAAACwEYY8AAAAALARhjwAAAAAsJH/B44G+YlpARhiAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 900x300 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "inputs_np, targets_np = brainmass.datasets.delayed_match_task(\n",
    "    n_samples=320, seq_len=8, n_symbols=2, seed=0,\n",
    ")\n",
    "print(\"inputs :\", inputs_np.shape, inputs_np.dtype, \"  (n_samples, seq_len, n_symbols)\")\n",
    "print(\"targets:\", targets_np.shape, targets_np.dtype, \" balance =\", float(targets_np.mean()))\n",
    "\n",
    "inputs = jnp.asarray(inputs_np, dtype=jnp.float32)\n",
    "targets = jnp.asarray(targets_np, dtype=jnp.int32)\n",
    "\n",
    "# Hold out a test split.\n",
    "n_train = 256\n",
    "X_train, y_train = inputs[:n_train], targets[:n_train]\n",
    "X_test, y_test = inputs[n_train:], targets[n_train:]\n",
    "n_symbols = inputs.shape[2]\n",
    "\n",
    "# Visualise one matching and one non-matching trial.\n",
    "fig, axes = plt.subplots(1, 2, figsize=(9, 3))\n",
    "for ax, idx, name in [(axes[0], int(np.argmax(targets_np == 1)), 'match'),\n",
    "                      (axes[1], int(np.argmax(targets_np == 0)), 'non-match')]:\n",
    "    ax.imshow(inputs_np[idx].T, aspect='auto', cmap='Greys', interpolation='nearest')\n",
    "    ax.set_title(f\"trial: {name}  (target={int(targets_np[idx])})\")\n",
    "    ax.set_xlabel('time step'); ax.set_ylabel('symbol')\n",
    "    ax.set_yticks(range(n_symbols))\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5d43e3f3",
   "metadata": {},
   "source": [
    "## The network\n",
    "\n",
    "A {class}`~brainmass.HORNSeqNetwork` maps an input *sequence* `(T, n_input)` to a single output\n",
    "vector by running its oscillator dynamics across the sequence and reading out the final state.\n",
    "We give it two output units (match / non-match logits). The `alpha` (excitability) is raised\n",
    "from its default so the oscillators respond strongly enough to learn this task quickly.\n",
    "\n",
    "The network writes its hidden states *in place* during the forward pass, and\n",
    "{meth}`~brainmass.HORNSeqNetwork.init_state` allocates them at the unbatched shape. To process a\n",
    "mini-batch we reset the hidden states to the batch shape before each forward pass and feed the\n",
    "sequence as `(T, batch, n_input)`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "419f8e1a",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-19T07:13:02.552359Z",
     "iopub.status.busy": "2026-06-19T07:13:02.552090Z",
     "iopub.status.idle": "2026-06-19T07:13:03.587258Z",
     "shell.execute_reply": "2026-06-19T07:13:03.586402Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "trainable weight tensors: 3\n"
     ]
    }
   ],
   "source": [
    "net = brainmass.HORNSeqNetwork(\n",
    "    n_input=n_symbols,\n",
    "    n_hidden=64,\n",
    "    n_output=2,\n",
    "    alpha=0.2,                    # excitability (raised from the 0.04 default)\n",
    "    omega=2 * np.pi / 28,\n",
    ")\n",
    "brainstate.nn.init_all_states(net)\n",
    "\n",
    "def reset_hidden(batch_size):\n",
    "    # HORN allocates hidden states unbatched; broadcast them to the batch shape.\n",
    "    for layer in net.layers:\n",
    "        shape = (batch_size,) + tuple(layer.horn.in_size)\n",
    "        layer.horn.x.value = jnp.zeros(shape)\n",
    "        layer.horn.y.value = jnp.zeros(shape)\n",
    "\n",
    "def logits(batch_inputs):                 # batch_inputs: (B, T, n_symbols) -> (B, 2)\n",
    "    reset_hidden(batch_inputs.shape[0])\n",
    "    seq = jnp.transpose(batch_inputs, (1, 0, 2))   # (T, B, n_symbols): time leads\n",
    "    return net(seq)\n",
    "\n",
    "# A trainable weight = a ParamState. HORN's Linear layers expose several.\n",
    "weights = net.states(brainstate.ParamState)\n",
    "print(\"trainable weight tensors:\", len(weights))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e5b01845",
   "metadata": {},
   "source": [
    "## The task loss and training loop\n",
    "\n",
    "The loss is softmax cross-entropy between the network's logits and the binary target, with\n",
    "accuracy tracked alongside. We register the trainable weights with an Adam optimiser and, each\n",
    "step, take the gradient of the loss through the whole recurrent rollout\n",
    "({func}`brainstate.transform.grad`) and apply it ({meth}`~braintools.optim.Adam.step`) -- the\n",
    "canonical brainmass training primitive, jitted for speed.\n",
    "\n",
    "This is the same backprop-through-the-solve as the fitting tutorials; the only new ingredients\n",
    "are **minibatching** and the **epoch loop**."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "f6cd5eb6",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-19T07:13:03.589534Z",
     "iopub.status.busy": "2026-06-19T07:13:03.589278Z",
     "iopub.status.idle": "2026-06-19T07:13:07.053605Z",
     "shell.execute_reply": "2026-06-19T07:13:07.052561Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch  0: train_loss=1.1386 train_acc=0.543  test_acc=0.516\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch  4: train_loss=0.6885 train_acc=0.562  test_acc=0.516\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch  8: train_loss=0.6811 train_acc=0.676  test_acc=0.750\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch 12: train_loss=0.5739 train_acc=0.785  test_acc=1.000\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch 16: train_loss=0.2497 train_acc=1.000  test_acc=1.000\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch 19: train_loss=0.1423 train_acc=1.000  test_acc=1.000\n"
     ]
    }
   ],
   "source": [
    "optimizer = braintools.optim.Adam(lr=3e-2)\n",
    "optimizer.register_trainable_weights(weights)\n",
    "\n",
    "def loss_and_acc(batch_inputs, batch_targets):\n",
    "    lg = logits(batch_inputs)\n",
    "    logp = jax.nn.log_softmax(lg, axis=-1)\n",
    "    ce = -jnp.mean(logp[jnp.arange(batch_targets.shape[0]), batch_targets])\n",
    "    acc = jnp.mean(jnp.argmax(lg, axis=-1) == batch_targets)\n",
    "    return ce, acc\n",
    "\n",
    "@brainstate.transform.jit\n",
    "def train_step(batch_inputs, batch_targets):\n",
    "    grad_fn = brainstate.transform.grad(\n",
    "        lambda: loss_and_acc(batch_inputs, batch_targets),\n",
    "        weights, has_aux=True, return_value=True,\n",
    "    )\n",
    "    grads, loss, acc = grad_fn()\n",
    "    optimizer.step(grads)\n",
    "    return loss, acc\n",
    "\n",
    "@brainstate.transform.jit\n",
    "def evaluate(batch_inputs, batch_targets):\n",
    "    return loss_and_acc(batch_inputs, batch_targets)\n",
    "\n",
    "n_epochs = 20\n",
    "batch_size = 32\n",
    "history = {'epoch': [], 'train_loss': [], 'train_acc': [], 'test_acc': []}\n",
    "\n",
    "for epoch in range(n_epochs):\n",
    "    perm = np.random.RandomState(epoch).permutation(n_train)\n",
    "    losses, accs = [], []\n",
    "    for start in range(0, n_train, batch_size):\n",
    "        idx = perm[start:start + batch_size]\n",
    "        if len(idx) < batch_size:\n",
    "            continue\n",
    "        loss, acc = train_step(X_train[idx], y_train[idx])\n",
    "        losses.append(float(loss)); accs.append(float(acc))\n",
    "    _, test_acc = evaluate(X_test, y_test)\n",
    "    history['epoch'].append(epoch)\n",
    "    history['train_loss'].append(float(np.mean(losses)))\n",
    "    history['train_acc'].append(float(np.mean(accs)))\n",
    "    history['test_acc'].append(float(test_acc))\n",
    "    if epoch % 4 == 0 or epoch == n_epochs - 1:\n",
    "        print(f\"epoch {epoch:2d}: train_loss={np.mean(losses):.4f} \"\n",
    "              f\"train_acc={np.mean(accs):.3f}  test_acc={float(test_acc):.3f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a8f32412",
   "metadata": {},
   "source": [
    "## Results\n",
    "\n",
    "The network starts at chance (~50%, a binary task) and -- as gradient descent shapes its\n",
    "recurrent weights to hold the cue across the delay -- climbs to near-perfect accuracy on both\n",
    "the training and held-out sets."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "d50d60cc",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-19T07:13:07.055553Z",
     "iopub.status.busy": "2026-06-19T07:13:07.055340Z",
     "iopub.status.idle": "2026-06-19T07:13:07.231640Z",
     "shell.execute_reply": "2026-06-19T07:13:07.230840Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "final train accuracy: 100.0%\n",
      "final test  accuracy: 100.0%\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABEEAAAGGCAYAAACUtJ9/AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAA2YhJREFUeJzs3Xd8U+X3wPHPTdp0791SaGnZLS1bhuAAWaKIAyeC4kYUnKigogIuXKj48ytOVFQQUUFFEBGUvTcUSqG7dO82ub8/0gRKW2jatOk479eLV9Lbm+eeJy2QnJznPIqqqipCCCGEEEIIIYQQLZzG1gEIIYQQQgghhBBCNAZJggghhBBCCCGEEKJVkCSIEEIIIYQQQgghWgVJggghhBBCCCGEEKJVkCSIEEIIIYQQQgghWgVJggghhBBCCCGEEKJVkCSIEEIIIYQQQgghWgVJggghhBBCCCGEEKJVkCSIEEIIIYQQQgghWgVJgggh6m3ixImEhYXV6bEvvPACiqJYN6Baqk/cQgghhBBCiOZHkiBCtGCKotTqz7p162wdqhBCCCEEAB988AGKotCvXz9bhyKEaIEUVVVVWwchhGgYX331VaWvv/jiC1avXs2XX35Z6fiwYcMICAio83XKysowGAw4ODhY/Njy8nLKy8txdHSs8/XrauLEiaxbt474+PhGv7YQQgghqjdw4ECSkpKIj4/n6NGjREZG2jokIUQLYmfrAIQQDef222+v9PWmTZtYvXp1lePnKywsxNnZudbXsbe3r1N8AHZ2dtjZyT9FQgghhIATJ07w77//smzZMu677z4WL17M888/b+uwqigoKMDFxcXWYQgh6kCWwwjRyl122WVERUWxfft2Bg8ejLOzM8888wwAP/30E6NHjyY4OBgHBwciIiJ46aWX0Ov1lcY4v7dGfHw8iqLwxhtv8H//939ERETg4OBAnz592Lp1a6XHVtcTRFEUpkyZwvLly4mKisLBwYFu3brx22+/VYl/3bp19O7dG0dHRyIiIvjoo4/q1WekoKCAxx57jNDQUBwcHOjUqRNvvPEG5xfNrV69mkGDBuHp6YmrqyudOnUyP28m7733Ht26dcPZ2RkvLy969+7N119/Xae4hBBCiNZg8eLFeHl5MXr0aG644QYWL15c5Zzs7GymTZtGWFgYDg4OtGnThgkTJpCRkWE+p7i4mBdeeIGOHTvi6OhIUFAQ48aNIy4uDjC+fqhuSbDpNcxnn31mPjZx4kRcXV2Ji4tj1KhRuLm5cdtttwHwzz//cOONN9K2bVscHBwIDQ1l2rRpFBUVVYn70KFD3HTTTfj5+eHk5ESnTp149tlnAfjrr79QFIUff/yxyuO+/vprFEXhv//+s/j5FEJUJR+/CiE4c+YMI0eO5Oabb+b22283L4357LPPcHV1Zfr06bi6urJ27VpmzZpFbm4ur7/++kXH/frrr8nLy+O+++5DURRee+01xo0bx/Hjxy9aPbJhwwaWLVvGgw8+iJubG++++y7XX389CQkJ+Pj4ALBz505GjBhBUFAQL774Inq9ntmzZ+Pn51en50FVVa655hr++usv7r77bmJjY/n999954oknSExM5K233gJg//79XH311XTv3p3Zs2fj4ODAsWPH2Lhxo3msjz/+mKlTp3LDDTfwyCOPUFxczJ49e9i8eTO33nprneITQgghWrrFixczbtw4dDodt9xyCx9++CFbt26lT58+AOTn53PppZdy8OBB7rrrLnr27ElGRgYrVqzg9OnT+Pr6otfrufrqq1mzZg0333wzjzzyCHl5eaxevZp9+/YRERFhcVzl5eUMHz6cQYMG8cYbb5grZr///nsKCwt54IEH8PHxYcuWLbz33nucPn2a77//3vz4PXv2cOmll2Jvb8+9995LWFgYcXFx/Pzzz7zyyitcdtllhIaGsnjxYq677roqz0lERAT9+/evxzMrhDBThRCtxkMPPaSe/9d+yJAhKqAuXLiwyvmFhYVVjt13332qs7OzWlxcbD525513qu3atTN/feLECRVQfXx81MzMTPPxn376SQXUn3/+2Xzs+eefrxIToOp0OvXYsWPmY7t371YB9b333jMfGzNmjOrs7KwmJiaajx09elS1s7OrMmZ1zo97+fLlKqC+/PLLlc674YYbVEVRzPG89dZbKqCmp6fXOPa1116rduvW7aIxCCGEEMJo27ZtKqCuXr1aVVVVNRgMaps2bdRHHnnEfM6sWbNUQF22bFmVxxsMBlVVVXXRokUqoM6fP7/Gc/766y8VUP/6669K3ze9hvn000/Nx+68804VUJ9++ukq41X3Wmnu3LmqoijqyZMnzccGDx6surm5VTp2bjyqqqozZsxQHRwc1OzsbPOxtLQ01c7OTn3++eerXEcIUTeyHEYIgYODA5MmTapy3MnJyXw/Ly+PjIwMLr30UgoLCzl06NBFxx0/fjxeXl7mry+99FIAjh8/ftHHDh06tNInNd27d8fd3d38WL1ez59//snYsWMJDg42nxcZGcnIkSMvOn51Vq5ciVarZerUqZWOP/bYY6iqyqpVqwDw9PQEjMuFDAZDtWN5enpy+vTpKst/hBBCCFG9xYsXExAQwOWXXw4Yl8eOHz+eb7/91rwUd+nSpcTExFSpljCdbzrH19eXhx9+uMZz6uKBBx6ocuzc10oFBQVkZGQwYMAAVFVl586dAKSnp7N+/Xruuusu2rZtW2M8EyZMoKSkhB9++MF8bMmSJZSXl1+0n5sQovYkCSKEICQkBJ1OV+X4/v37ue666/Dw8MDd3R0/Pz/zf8I5OTkXHff8/+hNCZGsrCyLH2t6vOmxaWlpFBUVVdsxvq5d5E+ePElwcDBubm6Vjnfp0sX8fTAmdwYOHMjkyZMJCAjg5ptv5rvvvquUEHnqqadwdXWlb9++dOjQgYceeqjSchkhhBBCnKXX6/n222+5/PLLOXHiBMeOHePYsWP069eP1NRU1qxZA0BcXBxRUVEXHCsuLo5OnTpZtfG6nZ0dbdq0qXI8ISGBiRMn4u3tjaurK35+fgwZMgQ4+1rJ9AHOxeLu3Lkzffr0qdQHZfHixVxyySWyQ44QViRJECFEpU8xTLKzsxkyZAi7d+9m9uzZ/Pzzz6xevZpXX30VoMYKiHNptdpqj6u12Jm7Po9taE5OTqxfv54///yTO+64gz179jB+/HiGDRtm/qSqS5cuHD58mG+//ZZBgwaxdOlSBg0a1CQ73AshhBC2tnbtWpKTk/n222/p0KGD+c9NN90EUG2D1PqoqSLk/ObvJg4ODmg0mirnDhs2jF9//ZWnnnqK5cuXs3r1anNT1dq8VjrfhAkT+Pvvvzl9+jRxcXFs2rRJqkCEsDJpjCqEqNa6des4c+YMy5YtY/DgwebjJ06csGFUZ/n7++Po6MixY8eqfK+6Y7XRrl07/vzzT/Ly8ipVg5iW/rRr1858TKPRcOWVV3LllVcyf/585syZw7PPPstff/3F0KFDAXBxcWH8+PGMHz+e0tJSxo0bxyuvvMKMGTNwdHSsU4xCCCFES7R48WL8/f15//33q3xv2bJl/PjjjyxcuJCIiAj27dt3wbEiIiLYvHkzZWVlNTZiN1WnZmdnVzpuqvqsjb1793LkyBE+//xzJkyYYD6+evXqSue1b98e4KJxA9x8881Mnz6db775hqKiIuzt7Rk/fnytYxJCXJxUggghqmWqxDi38qK0tJQPPvjAViFVotVqGTp0KMuXLycpKcl8/NixY+beHZYaNWoUer2eBQsWVDr+1ltvoSiKuddIZmZmlcfGxsYCUFJSAhh33DmXTqeja9euqKpKWVlZneITQgghWqKioiKWLVvG1VdfzQ033FDlz5QpU8jLy2PFihVcf/317N69u9qtZE2vWa6//noyMjKq/H9+7jnt2rVDq9Wyfv36St+35HVOda+VVFXlnXfeqXSen58fgwcPZtGiRSQkJFQbj4mvry8jR47kq6++YvHixYwYMQJfX99axySEuDipBBFCVGvAgAF4eXlx5513MnXqVBRF4csvv2wSy1FMXnjhBf744w8GDhzIAw88YE5gREVFsWvXLovHGzNmDJdffjnPPvss8fHxxMTE8Mcff/DTTz/x6KOPmhu1zp49m/Xr1zN69GjatWtHWloaH3zwAW3atGHQoEEAXHXVVQQGBjJw4EACAgI4ePAgCxYsYPTo0VV6jgghhBCt2YoVK8jLy+Oaa66p9vuXXHIJfn5+LF68mK+//poffviBG2+8kbvuuotevXqRmZnJihUrWLhwITExMUyYMIEvvviC6dOns2XLFi699FIKCgr4888/efDBB7n22mvx8PDgxhtv5L333kNRFCIiIvjll19IS0urddydO3cmIiKCxx9/nMTERNzd3Vm6dGm1vc/effddBg0aRM+ePbn33nsJDw8nPj6eX3/9tcprlgkTJnDDDTcA8NJLL9X+iRRC1IokQYQQ1fLx8eGXX37hscce47nnnsPLy4vbb7+dK6+8kuHDh9s6PAB69erFqlWrePzxx5k5cyahoaHMnj2bgwcP1mr3mvNpNBpWrFjBrFmzWLJkCZ9++ilhYWG8/vrrPPbYY+bzrrnmGuLj41m0aBEZGRn4+voyZMgQXnzxRTw8PAC47777WLx4MfPnzyc/P582bdowdepUnnvuOavNXwghhGgJFi9ejKOjI8OGDav2+xqNhtGjR7N48WJKSkr4559/eP755/nxxx/5/PPP8ff358orrzQ3LtVqtaxcuZJXXnmFr7/+mqVLl+Lj48Og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P++c5jDH+qjt6w6LkyBXX3019957L5988gl9+/YFYPPmzdx///1cc801tR7H19cXrVZLampqpeOpqakEBgZW+5iZM2dyxx13MHnyZACio6MpKCjg3nvv5dlnn632B+ng4ICDg0OV4xqNxuo/eEVRrDruycwizl/tpVchIbOYEC8Xq1zDUtaeY1Mkc2wZZI4tg8yxeWtqc2pprz1a8u+OicyxZZA51lOyMQmihPRGaYDxVVVl5k/7iT9TSJCHI2/eGFvthhfyc2wCAqNhN2hS90F1MWadhJJc0Nij8etc7TlNfo71UNs5WTzzd999l4iICPr374+joyOOjo4MHDiQyMhI3nnnnVqPo9Pp6NWrF2vWrDEfMxgMrFmzhv79+1f7mMLCwioTM/0FbYkdi8N9XdBU08umvIWu4RJCCCEakrz2EEI0S+adYRqmKer3207z064ktBqFd2/pgZdLw1b3i3owN0etYZtc084x/p3BTn6ONbG4EsTT05OffvqJo0ePmtfPdunShcjISIsvPn36dO6880569+5N3759efvttykoKGDSpEkATJgwgZCQEObOnQvAmDFjmD9/Pj169DCXpM6cOZMxY8ZYvD1vcxDk4cTccdE8s2wf+nNeaD341Q4+uqMXAyJt0xtECCGEaK7ktYcQollR1crb41rZkdQ8Zq0wvnGePqyjeXdK0UQFVmyTm30SinPA0aPy903JkYDoxo2rmbE4CWLSoUMHOnToUK+Ljx8/nvT0dGbNmkVKSgqxsbH89ttv5oZlCQkJlT59ee6551AUheeee47ExET8/PwYM2YMr7zySr3iaMrG92nL4I5+xGcU4u1iz8zl+9kSn8mdn27htRu6c12PNrYOUQghhGg25LWHEKJZyTwORVmgdYCAKKsOfSK9gEmfbqG4zMClHXx5YEjD9BsRVuTkBR6hkHMKUvdDuwGVv3/u9riiRrVKgpzb3Oti5s+fb1EAU6ZMYcqUKdV+b926dZW+trOz4/nnn+f555+36BrNXZCHk7kR6hd39+Wx73fz655kpi3ZTVJ2MQ9eFiH7dwshhBC1JK89hBDNRuIO421Qd6sub1iyNYGnlp5dUjGkox+a6tbhi6YnIMqYBEnZe4EkiHUTZi1NrZIgO3furNVg8ka84Tnaa3nv5h4Eezjy8T8neP33wyRlF/HiNd2w07a85jZCCCGE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507uv/9+br31VlavXl15zEMPPcRzzz3Hzz//THh4OOPHj6esrAywdyBuuOEGbrzxRrZv385f/vIX/vznP7No0aLK8ydPnszixYt56aWX2LVrF6+99hpt2rRxqMef/vQnnnvuOTZu3IiXlxd33HFHs7RfREREmpf6HiJyToaISBMoLi42AgICjLVr1zpsnzZtmnHTTTcZq1atMgDj/fffr9x34sQJw9/f31iyZIlhGIZx8803G5dddpnD+Q899JDRu3dvwzAMY8+ePQZgrFixoto6VNzHt99+W7lt+fLlBmCcOnXKKe0UERGRlkF9DxGpC40EEZEmsX//foqKirjsssto06ZN5c/bb7/NgQMHKo8bOXJk5e127drRo0cPdu3aBcCuXbsYPXq0Q7mjR49m3759WK1WkpKSsFgsjB07tta69O/fv/J2dHQ0ABkZGY1uo4iIiLQc6nuISF14uboCIuKZCgoKAFi+fDkxMTEO+3x9fR06Iw3l7+9fp+O8vb0rb5tMJsA+Z1hEREQ8h/oeIlIXGgkiIk2id+/e+Pr6cuTIEbp16+bwExsbW3ncTz/9VHn75MmT7N27l169egHQq1cv1qxZ41DumjVr6N69OxaLhX79+mGz2Rzm+YqIiEjrpL6HiNSFRoKISJMICgriwQcf5P7778dms3HBBReQm5vLmjVrCA4OJi4uDoAnnniC9u3bExkZyZ/+9CfCwsKYOHEiAA888ADDhg3jySefZNKkSaxbt46XX36Zf/3rXwDEx8czZcoU7rjjDl566SUGDBjA4cOHycjI4IYbbnBV00VERMQF1PcQkbpQEEREmsyTTz5JeHg48+bN4+DBg4SGhjJ48GAee+yxyiGhTz31FPfeey/79u1j4MCBfP755/j4+AAwePBgPvjgA+bMmcOTTz5JdHQ0TzzxBLfffnvlfbz66qs89thj3H333Zw4cYJOnTrx2GOPuaK5IiIi4mLqe4jIuZgMwzBcXQkRaX0SExO5+OKLOXnyJKGhoa6ujoiIiHg49T1EBJQTRERERERERERaCQVBRERERERERKRV0HQYEREREREREWkVNBJERERERERERFoFBUFEREREREREpFVQEEREREREREREWgUFQURERERERESkVVAQRERERERERERaBQVBRERERERERKRVUBBERERERERERFoFBUFEREREREREpFVQEEREREREREREWoX/BwZFunGMkGDAAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 1100x400 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "final_train = history['train_acc'][-1]\n",
    "final_test = history['test_acc'][-1]\n",
    "print(f\"final train accuracy: {final_train:.1%}\")\n",
    "print(f\"final test  accuracy: {final_test:.1%}\")\n",
    "\n",
    "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(11, 4))\n",
    "ax1.plot(history['epoch'], history['train_loss'], marker='.')\n",
    "ax1.set_xlabel('epoch'); ax1.set_ylabel('cross-entropy loss')\n",
    "ax1.set_title('Training loss'); ax1.grid(alpha=0.3)\n",
    "\n",
    "ax2.plot(history['epoch'], history['train_acc'], marker='.', label='train')\n",
    "ax2.plot(history['epoch'], history['test_acc'], marker='.', label='test')\n",
    "ax2.axhline(0.5, color='grey', ls='--', lw=1, label='chance')\n",
    "ax2.set_xlabel('epoch'); ax2.set_ylabel('accuracy')\n",
    "ax2.set_ylim(0.4, 1.02); ax2.set_title('Accuracy'); ax2.legend(); ax2.grid(alpha=0.3)\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8f54b657",
   "metadata": {},
   "source": [
    "## Lessons: the `Trainer` gap\n",
    "\n",
    "This notebook used {mod}`braintools.optim` directly because {class}`~brainmass.Fitter` does not\n",
    "yet cover **task training**:\n",
    "\n",
    "- `Fitter` fits parameters against a **single fixed target** via one `predict(model) -> scalar`\n",
    "  call. Task training needs **minibatched `(inputs, targets)` pairs**, an **epoch loop**, and a\n",
    "  **held-out metric** -- none of which `Fitter` exposes.\n",
    "- We also had to reset the network's hidden states to the batch shape by hand\n",
    "  (`reset_hidden`), because {class}`~brainmass.HORNSeqNetwork` allocates them unbatched. A\n",
    "  training abstraction would own batched state initialisation.\n",
    "\n",
    "A future `Trainer` -- the data-driven counterpart to `Fitter` -- would wrap exactly the loop\n",
    "written above: dataset minibatching, the jitted `grad -> optimizer.step`, per-epoch\n",
    "train/validation metrics, and batched state handling. Until then, the loop in this notebook is\n",
    "the recommended pattern for training a brainmass network on a task. (See\n",
    "{doc}`/data_driven/index` for the data-driven roadmap.)\n",
    "\n",
    "## Summary\n",
    "\n",
    "- **Training** optimises a whole network's weights over many `(input, target)` pairs and epochs,\n",
    "  using the same backprop-through-the-solve as fitting.\n",
    "- A {class}`~brainmass.HORNSeqNetwork` learns the delayed match-to-sample task from\n",
    "  {mod}`brainmass.datasets` to near-perfect accuracy in ~20 epochs.\n",
    "- {mod}`braintools.optim` provides the optimiser; the `grad -> step` loop is jitted for speed.\n",
    "- A dedicated `Trainer` is the natural next abstraction; for now, drive the optimiser directly.\n",
    "\n",
    "## Next steps\n",
    "\n",
    "- {doc}`/tutorials/06_fitting_with_gradients` -- the gradient machinery behind training.\n",
    "- {doc}`/data_driven/index` -- the data-driven narrative and roadmap.\n",
    "- {doc}`/reference/horn` -- {class}`~brainmass.HORNSeqNetwork` API."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
