A Python implementation of the Hopfield network
Project description
hopfieldnetwork
A Hopfield network is a special kind of an artifical neural network. It implements a so called associative or content addressable memory. This means that memory contents are not reached via a memory address, but that the network responses to an input pattern with that stored pattern which has the highest similarity.
hopfieldnetwork is a Python package which provides an implementation of a Hopfield network. The package also includes a graphical user interface.
Installing
Install and update using pip:
pip install -U hopfieldnetwork
Requirements
- Python 2.7 or higher (CPython or PyPy)
- NumPy
- Matplotlib
Usage
Import the HopfieldNetwork
class:
from hopfieldnetwork import HopfieldNetwork
Create a new Hopfield network of size N = 100:
hopfield_network1 = HopfieldNetwork(N=100)
Save / Train Images into the Hopfield network:
hopfield_network1.train_pattern(input_pattern)
Start an asynchronous update with 5 iterations:
hopfield_network1.update_neurons(iterations=5, mode="async")
Compute the energy function of a pattern:
hopfield_network1.compute_energy(input_pattern)
Save a network as a file:
hopfield_network1.save_network("path/to/file")
Open an already trained Hopfield network:
hopfield_network2 = HopfieldNetwork(filepath="network2.npz")
Graphical user interface
In the Hopfield network GUI, the one-dimensional vectors of the neuron states are visualized as a two-dimensional binary image. The user has the option to load different pictures/patterns into network and then start an asynchronous or synchronous update with or without finite temperatures. There are also prestored different networks in the examples tab.
Start the UI:
If you installed the hopfieldnetwork
package via pip, you can start the UI with:
hopfieldnetwork-ui
Otherwise you can start UI by running gui.py
as module:
python -m hopfieldnetwork.gui
GUI Layout
The Hopfield network GUI is divided into three frames:
Input frame
The input frame (left) is the main point of interaction with the network. The user can
change the state of an input neuron by a left click to +1, accordingly by to right-click
to -1. This will only change the state of the input pattern not the state of the actual
network. The input pattern can be transfered to the network with the buttons below:
- Set intial sets the current input pattern as the start configuration of the neurons.
- Save / Train stores / trains the current input pattern into the Hopfield network.
- Rand sets a random input pattern.
- Clear sets all points of the input pattern to -1.
Output frame
The output frame (center) shows the current neuron configuration.
- Sync update starts a synchronous update.
- Async update starts an asynchronous update.
- Randomize randomly flips the state of one tenth of the neurons.
- Set partial sets the first half of the neurons to -1.
- Set random sets a random neuron state.
Saved pattern frame
The Saved pattern frame (right) shows the pattern currently saved in the network.
- Set initial sets the currently displayed image as new neuron state.
- Set input sets the currently displayed image as input pattern.
- Remove removes the currently displayed image from the Hopfield network.
Menu bar
- In the Network tab, a new Hopfield network of any size can be initialized.
In addition, it is possible to save the current network and load stored networks. Also, a raster graphic (JPG, PNG, GIF, TIF) can be added to the network or an entirly new network can be created out of multiple images.
- In the Options tab, the update with finite temperatures can be (de)activated.
- View offers options for visually changing the GUI.
- In the Examples tab, different example networks can be loaded.
License
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 Distributions
Built Distribution
File details
Details for the file hopfieldnetwork-1.0.1-py3-none-any.whl
.
File metadata
- Download URL: hopfieldnetwork-1.0.1-py3-none-any.whl
- Upload date:
- Size: 88.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.7.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 095fd0d63a7dca63d980199bf12d5d482ac542a318174f3c0d6d67071ce390f1 |
|
MD5 | fe1bff1b17f72d4430b937c3812880e0 |
|
BLAKE2b-256 | 7f6d6d74866a255eccd2a9a8e90005864ed8f639c6992cf45752bed59032b1b2 |