HivePaaS
An open-source, self-hosted PaaS on Docker Swarm. Deploy apps, databases and functions from one VPS to a whole cluster, with SSL, backups and autoscaling built in.
GPU-enabled, PyTorch-native Tsetlin machines
Translation pending
Developer toolsPython · TeXGitHub @vlbthambawitaOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Tsetlin Machine using pytorch
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗Models, data preparation, training, evaluation, interpretation and visualisation in one package, GPU-enabled and PyTorch-native.
A Tsetlin machine learns propositional rules
(IF x0 AND NOT x1 THEN class 1) with teams of learning automata instead of gradients.
torchtsetlin implements the family as ordinary torch.nn.Modules: the automata live in
tensors, so a model moves between CPU and GPU with .to(device), is saved with
state_dict(), and learns from mini-batches with a single model.update(x, y) call.
import torchtsetlin as tt
x_train, y_train = tt.data.make_noisy_xor(5000, noise=0.4) # Boolean features, int labels
x_test, y_test = tt.data.make_noisy_xor(2000, noise=0.0, seed=1)
model = tt.TsetlinMachine(n_features=12, n_classes=2, n_clauses=20, T=15, s=3.9).to("cuda")
# PyTorch-style loop: update() is the analogue of loss.backward(); optimizer.step()
for epoch in range(50):
model.train()
for i in range(0, 5000, 10):
model.update(x_train[i:i+10].cuda(), y_train[i:i+10].cuda())
model.eval()
acc = (model(x_test.cuda()).argmax(1) == y_test.cuda()).float().mean()
print(model.rules()[:2]) # ['IF x0 AND NOT x1 THEN 1', 'IF x1 AND NOT x0 THEN 1']
Or with the built-in trainer:
trainer = tt.Trainer(model, batch_size=10, callbacks=[tt.EarlyStopping(patience=20)])
trainer.fit((x_train, y_train), epochs=100, val_data=(x_test, y_test))
trainer.evaluate((x_test, y_test)) # {'accuracy': 0.99}
| Models | TsetlinMachine (multi-class, optional integer clause weights), CoalescedTsetlinMachine (shared clauses; multi-class or multi-label), RegressionTsetlinMachine, ConvTsetlinMachine / Conv1dTsetlinMachine / Conv3dTsetlinMachine (volumes) and convolutional coalesced / regression variants, SegmentationTsetlinMachine / CoalescedSegmentationTsetlinMachine for dense per-pixel prediction |
| Learning | vote margin T, specificity s, memory depth, boosted true-positive feedback, clause-size constraint, drop-clause / drop-literal, focused negative sampling, batched (GPU-friendly) or exact sequential feedback |
| Data | thermometer, one-hot, bit-plane, adaptive-threshold, colour-thermometer, hypervector and multi-scale pyramid encoders; synthetic datasets (including segmentation scenes and 3D volumes); torchvision helpers for classification and segmentation |
| Training | Trainer for tensors / Dataset / DataLoader, callbacks (early stopping, checkpoints, CSV logs, hyper-parameter schedules), History |
| Evaluation | accuracy, confusion matrix, precision/recall/F1, regression and multi-label metrics, IoU / Dice / pixel accuracy / boundary-F1 for segmentation, calibration, trustworthiness curves |
| Interpretation | rule extraction, clause activity/precision, closed-form global & local feature importance, per-example and per-pixel explanations |
| Visualisation | memory plots, automata heat-maps, convolutional clause patches, segmentation overlays and vote maps, confusion matrices, vote distributions |
torchtsetlin is published on PyPI: https://pypi.org/project/torchtsetlin/. It needs
Python 3.9+ and PyTorch 2.0+.
Install PyTorch first, choosing the CUDA or CPU build for your machine from pytorch.org, e.g.
pip install torch # default build
pip install torch --index-url https://download.pytorch.org/whl/cpu # CPU-only
Install torchtsetlin from PyPI:
pip install torchtsetlin
Optional extras:
pip install "torchtsetlin[viz]" # matplotlib for torchtsetlin.viz
pip install "torchtsetlin[vision]" # torchvision for the MNIST / torchvision / segmentation dataset helpers
pip install "torchtsetlin[sklearn]" # scikit-learn interop in the examples
pip install "torchtsetlin[all]" # everything, including docs and dev tools
Check the installation:
import torch, torchtsetlin as tt
print(tt.__version__, torch.cuda.is_available())
git clone https://github.com/vlbthambawita/torchtsetlin
cd torchtsetlin
pip install -e ".[dev]"
pytest # run the test-suite (uses the GPU when available)
mkdocs serve # browse the documentation locally
Each clause is an AND of literals (x_k or NOT x_k); every (clause, literal) pair has a
Tsetlin automaton whose integer state decides whether the literal is included. For a
training example, clauses of the true class receive Type I feedback (memorise the
example's True literals, forget the rest) and clauses of a random other class receive
Type II feedback (add a False literal so the clause stops matching), each with a
probability controlled by the vote margin T. torchtsetlin evaluates a mini-batch with one
matrix product, counts the feedback events per (clause, literal) with another, and turns the
counts into binomial state transitions — the whole update is a handful of tensor ops. See the
concept pages for
details and references.
mkdocs serve locally).benchmarks/.examples/ (see its
README): Noisy XOR, tabular data with thermometer encoding,
regression, MNIST flat and convolutional, four convolutional walkthroughs covering 2-D
clauses (shapes_conv.py), 1-D signals (conv1d_ramps.py), convolutional regression
(conv_regression_blobs.py) and shared clause pools (mnist_conv.py --coalesced), and
semantic segmentation on generated street scenes (segmentation_scenes.py).examples/notebooks/: Iris (rules you can read),
MNIST (convolutional clauses and GPU throughput) and CIFAR-10 (booleanizing colour images),
plus two that work through the Tsetlin-machine segmentation literature — the Convolutional
Regression TM (ICMLT 2021) and CTM-UNet (ISTM 2025), the latter building a dense per-pixel
Tsetlin segmentation head.If you use torchtsetlin in research, please cite the five-page technical report, together with
the Tsetlin machine papers whose algorithms you rely on (see the documentation). The PDF and
other formats are at https://vajira.info/torchtsetlin/cite/, and GitHub's
"Cite this repository" button reads CITATION.cff.
@techreport{thambawita2026torchtsetlin,
author = {Thambawita, Vajira},
title = {torchtsetlin: Fast, Interpretable Tsetlin Machines for the PyTorch Ecosystem},
institution = {Simula Metropolitan Center for Digital Engineering},
type = {Technical report},
year = {2026},
note = {Software version 0.3.2},
url = {https://github.com/vlbthambawita/torchtsetlin}
}
MIT — see LICENSE.