This project is a Java implementation of a synaptic matrix. To learn more about the synaptic matrix, see the project page for the Python implementation.
The synaptic matrix implemented in this project consists of the following API:
/**
* The inputExample must be an array containing only 0s and 1s.
*/
void train(int[] inputExample, int classCell);
/**
* The input must be an array containing only 0s and 1s.
*/
int[] evaluate(int[] input);The int classCell in the train() method above represents the label corresponding to the example given by int[] inputExample.
The synaptic matrix is implemented in the SupervisedSynapticMatrix class. The following example demonstrates how it is created:
SupervisedSynapticMatrix matrix = new SupervisedSynapticMatrix(784, new SynapticConfig(1, 15, 4200));The first constructor argument, in this case 784, represents the length of the input vector. The second constructor argument, the SynapticConfig, contains the synaptic matrix's hyperparameters. These are denoted by the variables b, c, and k. These are constants used while updating the weights of synapses. For more information about these constants, see Chapter 3 of Arnold Trehub's book The Cognitive Brain.
This project constitutes largely speculative, experimental, and exploratory work. As such, it is not meant to be used as a formal library. Nevertheless, feel free to use the code for your own purposes. If you do, let me know how you've used it and what results you obtained.
NOTE: The MNIST utility classes in this project were lifted from the https://github.com/sina-masoud-ansari/MNIST repo, with the exception of MNISTViewer.