Science Score: 44.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (6.4%) to scientific vocabulary
Repository
Hopfield network implementation
Basic Info
- Host: GitHub
- Owner: SOJ281
- Language: Python
- Default Branch: main
- Size: 46.2 MB
Statistics
- Stars: 0
- Watchers: 1
- Forks: 1
- Open Issues: 0
- Releases: 0
Metadata Files
README.md
Hopfield
This Github contains multiple hopfield network implementations
They are all contained in the hopfield.py file.
All test scripts can be run using the following command:
python3 <script>
Required modules:
Numpy
scikit-image
PIL
matplotlib
scipy
Documentation:
hopfield.py
Hopfield Class:
Implements a basic Hopfield network.
init(inputs):
Initializes a Hopfield network with given input patterns.
Parameters:
inputs (list of arrays): List of input patterns (bipolar).
Returns:
None
predict(input, iterations, theta=0.0):
Predicts the output pattern given an input pattern.
Parameters:
input (array): Input pattern.
iterations (int): Maximum number of iterations.
theta (float, optional): Threshold for energy.
Returns:
predicted (list of arrays): Predicted patterns at each iteration.
DAMDiscreteHopfield Class:
Implements a Dense Associative Memory (DAM) Hopfield network for discrete patterns.
init(inputs):
Initializes a DAM Hopfield network with given input patterns.
Parameters:
inputs (list of arrays): List of input patterns (bipolar).
Returns:
None
predict(input, iterations):
Predicts the output pattern given an input pattern.
Parameters:
input (array): Input pattern.
iterations (int, optional): Maximum number of iterations.
Returns:
predicted (list of arrays): Predicted patterns at each iteration.
ContinuousHopfield Class:
Implements a Hopfield network for continuous patterns and is adjusted to do mean.
init(inputs):
Initializes a Continuous Hopfield network with given input patterns.
Parameters:
inputs (list of arrays): List of input patterns (continuous).
Returns:
None
predict(input, iterations, beta=8):
Predicts the output pattern given an input pattern.
Parameters:
input (array): Input pattern.
iterations (int, optional): Maximum number of iterations.
beta (float, optional): Temperature parameter for softmax function.
Returns:
predicted (list of arrays): Predicted patterns at each iteration.
ContinuousHopfield Class:
Implements a Hopfield network for continuous patterns.
init(inputs):
Initializes a Continuous Hopfield network with given input patterns.
Parameters:
inputs (list of arrays): List of input patterns (continuous).
Returns:
None
predict(input, iterations, beta=8):
Predicts the output pattern given an input pattern.
Parameters:
input (array): Input pattern.
iterations (int, optional): Maximum number of iterations.
beta (float, optional): Temperature parameter for softmax function.
Returns:
predicted (list of arrays): Predicted patterns at each iteration.
SimplicialHopfield Class:
Implements a Hopfield network using setwise connections.
init(inputs):
Initializes a Simplicial Hopfield network with given input patterns.
Parameters:
inputs (list of arrays): List of input patterns (continuous).
Returns:
None
predict(input, iterations, theta=0.0):
Predicts the output pattern given an input pattern.
Parameters:
input (array): Input pattern.
iterations (int, optional): Maximum number of iterations.
theta (float, optional): Threshold for energy.
Returns:
predicted (list of arrays): Predicted patterns at each iteration.
imageTest.py
This script implements several functions for image processing, image corruption, and visualization. It uses the Hopfield network implementations from the hopfield module to perform predictions on corrupted images.
Functions:
randomFlipping(input, flipCount): Randomly inverts values in an input array based on a specified flip probability.
Parameters:
input (array): The input data.
flipCount (float): The probability of flipping a value.
Returns:
flippy (array): A copy of the input array with random flips.
randomBlocking(input, blockLevel): Blocks a random chunk of data from the input based on the specified block level.
Parameters:
input (array): The input data.
blockLevel (float): The proportion of data to block.
Returns:
blocked (array): The input array with random blocks removed.
highBlocking(input, blockLevel): Blocks a high portion of the input data by zeroing out an initial segment.
Parameters:
input (array): The input data.
blockLevel (float): The proportion of the data to block from the beginning.
Returns:
blocked (array): The input array with a high portion blocked.
preprocessing(img, dim=128): Preprocesses an image by resizing it and converting it to bipolar format.
Parameters:
img (array): The image to preprocess.
dim (int, optional): The dimension to resize the image to (default is 128).
Returns:
flatty (array): The preprocessed and flattened image data.
reshape(data): Reshapes the flattened data into a 2D square.
Parameters:
data (array): The flattened data.
Returns:
reshaped (array): The reshaped 2D array.
comparePatterns(pat1, pat2): Compares two patterns and returns the proportion of matching elements.
Parameters:
pat1 (array): The first pattern.
pat2 (array): The second pattern.
Returns:
similarity (float): The proportion of matching elements.
getAccuracy(originals, finalised): Calculates the accuracy by comparing the original and final patterns.
Parameters:
originals (list of arrays): The list of original patterns.
finalised (list of lists of arrays): The list of predicted patterns.
Returns:
accuracy (float): The accuracy based on correct predictions.
resultsPlotter(original, iterations): Plots the original and predicted patterns in a grid format for visualization.
Parameters:
original (list of arrays): The list of original patterns.
iterations (list of lists of arrays): The list of predicted patterns.
Returns:
None. Plots the results using matplotlib.pyplot.
Main Process:
Load Images: Loads images from a specified directory and preprocesses them to be used with the Hopfield network. Corrupt Images: Applies corruption (e.g., highBlocking) to the images to simulate damage. Hopfield Network Prediction: Uses a Hopfield-based class (e.g., DAMDiscreteHopfield) to predict patterns from corrupted images. Plot Results: Plots the original and predicted patterns to visually assess the results.
testFramework.py
Functions:
randomFlipping(input, flipCount): Randomly flips elements in an input array based on a specified flip probability.
Purpose: Simulate data corruption by randomly inverting values in an array.
Parameters:
input (array): The input array.
flipCount (float): The probability of flipping an element.
Returns: flippy (array): The modified array with random flips.
highBlocking(input, blockLevel): Blocks a high proportion of an input array by setting a segment of elements to 1.
Purpose: Simulate data corruption by blocking a portion of the input array.
Parameters:
input (array): The input array.
blockLevel (float): The proportion of elements to block.
Returns: blocked (array): The modified array with a high proportion blocked.
GeneralErrorstuff(filename, HopfieldType, numsneurons=[100], thetas=[0.0], corruption=[0,50,10], maxpatterns=[1,50,1], betas=[8], rectified=True, powers=[2], pairwiseconnections=False, maxerror=1): Generalized test function to evaluate different Hopfield-type networks with varying parameters and corruption levels.
Purpose: Test various Hopfield network configurations and generate error statistics.
Parameters:
filename (str): Name of the output file for test results.
HopfieldType (str): Type of Hopfield network to use.
nums_neurons (list of int): List of neuron counts to test.
thetas (list of float): List of theta values for energy calculation.
corruption (list of int): Corruption level details [min, max, step].
max_patterns (list of int): Range for the number of patterns [min, max, step].
betas (list of int): List of beta values for continuous Hopfield networks.
rectified (bool): Whether to use rectification in energy calculation (DAM).
powers (list of int): List of power values for DAM energy function.
pairwise_connections (bool): If True, use pairwise connections for Simplicial Hopfield.
max_error (float): Maximum error rate threshold to stop testing.
Returns: None. Writes results to a CSV file and displays console output with test statistics.
HopfieldSyncTests(): Runs a series of synchronized Hopfield tests and outputs results to a CSV file.
Purpose: Evaluate the performance of synchronized Hopfield networks with different neuron and pattern counts.
Parameters: None.
Returns: None. Writes test results to a CSV file and generates a scatter plot.
HopfieldAsyncTests(): Runs a series of asynchronous Hopfield tests and outputs results to a CSV file.
Purpose: Evaluate the performance of asynchronous Hopfield networks with different neuron and pattern counts.
Parameters: None.
Returns: None. Writes test results to a CSV file and generates a scatter plot.
DAMTests(): Runs a series of Dense Associative Memory (DAM) tests and outputs results to a CSV file.
Purpose: Evaluate the performance of DAM networks with different neuron and pattern counts.
Parameters: None.
Returns: None. Writes test results to a CSV file and generates a scatter plot.
Script Execution:
The main section of the script allows for execution of various tests based on the configuration in GeneralErrorstuff. It also includes commented-out sections for previous experiments and outlines current or future test plans.
plotResults.py
Functions:
plot_corruption(filename, title): Plots the error rate against the number of patterns for different corruption levels from a CSV file.
Purpose: Visualize the error rate versus the number of patterns for various levels of data corruption.
Parameters:
filename (str): Path to the CSV file containing test results.
title (str): Title for the plot.
Returns: None. Displays a plot using matplotlib.pyplot.
plot_thetas(filename, title, levels): Plots the error rate against the number of patterns for different theta values.
Purpose: Visualize the error rate versus the number of patterns for different values of the parameter theta.
Parameters:
filename (str): Path to the CSV file containing test results.
title (str): Title for the plot.
levels (list of float): List of theta values to plot.
Returns: None. Displays a plot using matplotlib.pyplot.
plot_betas(filename, title, levels): Plots the error rate against the number of patterns for different beta values.
Purpose: Visualize the error rate versus the number of patterns for different values of the parameter beta.
Parameters:
filename (str): Path to the CSV file containing test results.
title (str): Title for the plot.
levels (list of float): List of beta values to plot.
Returns: None. Displays a plot using matplotlib.pyplot.
plotAtCorruptionLevel(filename, title, corruptionlevel, paramvals): Plots the error rate against the number of patterns at a specific level of corruption for different parameter values.
Purpose: Visualize the error rate versus the number of patterns at a specific level of corruption for different parameter values.
Parameters:
filename (str): Path to the CSV file containing test results.
title (str): Title for the plot.
corruption_level (float): The level of corruption to consider.
param_vals (list of float): List of parameter values to plot.
Returns: None. Displays a plot using matplotlib.pyplot.
plotAtCorruptionLevelMulti(filenames, title, corruptionlevel, paramvals, numsneurons, labels, errorlevel): Plots the error rate against the pattern-to-neuron ratio at a specific level of corruption for multiple files.
Purpose: Visualize the error rate against the pattern-to-neuron ratio at a specific level of corruption for multiple configurations.
Parameters:
filenames (list of str): List of CSV files to process.
title (str): Title for the plot.
corruption_level (float): The level of corruption to consider.
param_vals (list of lists of float): List of parameter values to plot.
nums_neurons (list of int): List of neuron counts for each configuration.
labels (list of str): Labels for each configuration.
error_level (float): Error rate threshold for additional plot information.
Returns: None. Displays a plot using matplotlib.pyplot.
appendcolumns(infile, outfile, newcolumns): Appends new columns to each line in a file.
Purpose: Append additional information to a CSV file.
Parameters:
infile (str): Input file path.
outfile (str): Output file path.
new_columns (str): New column content to append to each line.
Returns: None. Writes the modified content to the output file.
plottoerrorlever(filename, title, errorlevel, paramvals): Plots the critical number of patterns to maintain a specific error rate at different parameter values.
Purpose: Identify the critical pattern count to maintain a specified error rate at different parameter values.
Parameters:
filename (str): Path to the CSV file containing test results.
title (str): Title for the plot.
error_level (float): The acceptable error rate threshold.
param_vals (list of float): List of parameter values to plot.
Returns: None. Displays a plot using matplotlib.pyplot.
errorleverMulti(filenames, errorlevel, paramvals, corruption_level): Returns a list of critical pattern counts for multiple files, given an error rate threshold and a specific corruption level.
Purpose: Calculate the critical pattern count to maintain a specific error rate at different parameter values for multiple configurations.
Parameters:
filenames (list of str): List of CSV files to process.
error_level (float): The acceptable error rate threshold.
param_vals (list of lists of float): List of parameter values to consider.
corruption_level (float): The level of corruption to consider.
Returns: critical_pattern_nums (list of float): The list of critical pattern counts for each configuration.
writeTableToFile(outfile, filenames, Errorlevels, paramvals, corruption_levels): Writes a table of critical pattern counts to a CSV file, based on error rate thresholds and corruption levels.
Purpose: Generate a summary table of critical pattern counts for various error levels and corruption levels.
Parameters:
outfile (str): Output file path.
filenames (list of str): List of CSV files to process.
Error_levels (list of float): List of error rate thresholds.
param_vals (list of lists of float): List of parameter values for each configuration.
corruption_levels (list of float): List of corruption levels to consider.
Returns: None. Writes the summary table to a CSV file.
Owner
- Login: SOJ281
- Kind: user
- Repositories: 1
- Profile: https://github.com/SOJ281
Citation (CITATION.cff)
cff-version: 1.2.0 message: "If you use this software, please cite it as below." authors: - family-names: "James" given-names: "Scott" - family-names: "Mehta" given-names: "Hritik" - family-names: "Pearce" given-names: "Adam" title: "Hopfield" version: 1.0.0 doi: 10.5281/zenodo.1234 date-released: 2024-04-13 url: "https://github.com/SOJ281/Hopfield"