FreezeNet is an attempt at making Proof of Work more computationally useful than it currently is. The idea is to replace Hashcash-like challenges with neural network training. This is not a fully-implemented alternative but only a proof of concept which was presented for a Data Mining project at the University of Stavanger. However, the results are encouraging so it seems worth sharing. Pull requests, questions and criticism are welcome.
For more information, you can read the paper explaining this project or take a look at the slides presenting it.
You can apply a watermark to a model at any point.
model = FreezeNet()
some_signature = Signature(b'Some block information', 4096)
another_signature = Signature(b'Some other block information', 4096)
some_signature.sign(model)
some_signature.verify(model) # True
another_signature.verify(model) # False
another_signature.sign(model)
some_signature.verify(model) # False
another_signature.verify(model) # True
You can also train a model with a watermark.
model = FreezeNet()
some_signature = Signature(b'Some block information', 4096)
model.fit(x_train, y_train, **train_parameters, signature=some_signature)
some_signature.verify(model) # True
@misc{freezenet20,
author = "Téo Bouvard",
title = "Freezenet: Making proof-of-work more useful",
url = "https://github.com/teobouvard/freezenet"
}