A Python inference-only engine for the hashtron binary classifier
Project description
Hashtron Network Implementation
This project implements a hashtron network with feedforward layers and combiners, including a 2D majority pooling layer. The network supports feedforward inference with hashtron-based classifiers but not training. For training, see the original golang version which is CPU and GPU (CUDA) optimized.
Modules
datasets: Loader for demo datasets such as MNIST.hash: Implements fast modular hash function.cell: Implements the hashtron classifier which repeatedly calls the hash.layer: Defines layer and combiner interfaces, including a 2D majority pooling combiner layer.net: Implements the feedforward network and related utilities.
Usage
To use the network, create an instance of FeedforwardNetwork called e.g. net and add layers
using net.new_layer, adding net.new_combiner in between layers.
Load your model from ZLIB file using net.io.read_zlib_weights_from_file(file_name).
Use net.network.infer(input_number_or_sample) to perform inference.
Examples
pip install hashtron
from pyclassifier.net.feedforward.net import Net
from pyclassifier.layer.majpool2d.layer import MajPool2DLayer
from pyclassifier.datasets.mnist.mnist import MNISTDataset
import urllib.request
import tempfile
import os
# Specify network size
fanout1 = 3
fanout2 = 5
fanout3 = 3
fanout4 = 5
# Create a Hashtron network (MNIST handwritten digits net)
tron = Net.new()
tron.new_layer(fanout1*fanout2*fanout3*fanout4, 0, 1<<fanout4)
tron.new_combiner(MajPool2DLayer(fanout1*fanout2*fanout4, 1, fanout3, 1, fanout4, 1, 1))
tron.new_layer(fanout1*fanout2, 0, 1<<fanout2)
tron.new_combiner(MajPool2DLayer(fanout2, 1, fanout1, 1, fanout2, 1, 1))
tron.new_layer(1, 0)
# load weights from zlib file
filename = os.path.expanduser('~/classifier/cmd/train_mnist/output.77.json.t.zlib')
if os.path.exists(filename):
ok = tron.io.read_zlib_weights_from_file(filename)
else:
# load online model weights zlib file
with urllib.request.urlopen('https://www.hashtron.cloud/dl/mnist/output.77.json.t.zlib') as f:
with tempfile.NamedTemporaryFile(delete=True) as dst_file:
data = f.read()
dst_file.write(data)
ok = tron.io.read_zlib_weights_from_file(dst_file.name)
if not ok:
raise Exception('model weights were not loaded')
# test the datasets
for i in range(2):
# load offline then online mnist
try:
dataset = MNISTDataset(True, i == 0)
except FileNotFoundError:
dataset = MNISTDataset(True, i == 0, MNISTDataset.download())
correct = 0
for sample in dataset:
pred = tron.network.infer(sample).feature(0) & 1
actual = sample.output().feature(0) & 1
if pred == actual:
correct+=1
print(100 * correct // len(dataset), '% on', len(dataset), 'MNIST samples')
Summary
This Python translation maintains the structure and functionality of the original Go code, adapting Go-specific features to Python equivalents. The translation includes classes for hash functions, hashtron classifiers, layers, and a feedforward network, along with unit tests and a README for documentation.
Contributing
- Open issue
- Fork the repo
- Implement what is needed (no blobs in repo, host datasets or demo models externally)
- Add tests as needed
- Experimentally install the package:
pip install -e . - Run all testcases:
pip install pytestand thenpython3 -m pytest - Contribute a pull request
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hashtron-0.0.3.tar.gz.
File metadata
- Download URL: hashtron-0.0.3.tar.gz
- Upload date:
- Size: 3.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.9.21
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
85949e6c6198611a5409969e083799f7bfaf6224258cbcd4b15115a4debf15ce
|
|
| MD5 |
4908ebfa58abab777b37d07b82bf47e4
|
|
| BLAKE2b-256 |
bdf3c4bfd0945194506c93f30599883f3f5acf05f6023b92c5f6880e2368b160
|
File details
Details for the file hashtron-0.0.3-py3-none-any.whl.
File metadata
- Download URL: hashtron-0.0.3-py3-none-any.whl
- Upload date:
- Size: 4.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.9.21
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5e2ea030c67e2ba1332c3011996713a358456bf5ed0fbee3d8671567b11ce265
|
|
| MD5 |
85ba456289741ba8d55b21ed986a9a2e
|
|
| BLAKE2b-256 |
b0f72f56be92ed6cf8172c0564d94e44eeb3b79f4d3d62d768e32cb9d82d46fd
|