def __init__( self, data={}, n_bits_in=16, n_bits_out=16, n_ones_in=3, n_ones_out=3, n_samples=-1, algorithm="balanced" ): """ Fills the network structure with the given parameters. :param n_bits_in: number of input bits. :param n_bits_out: number of output bits. :param n_ones_in: number of ones in the input per sample. :param n_ones_out: number of ones in the output per sample. :param n_samples: number of samples. If negative, the number of samples with the maximum information are chosen. """ # If "n_bits" is specified, set both n_bits_in and n_bits_out if ("n_bits" in data) and (data["n_bits"] > 0): self["n_bits_in"] = int(data["n_bits"]) self["n_bits_out"] = int(data["n_bits"]) self["n_bits"] = int(data["n_bits"]) else: utils.init_key(self, data, "n_bits_in", n_bits_in, _type=int) utils.init_key(self, data, "n_bits_out", n_bits_out, _type=int) utils.init_key( self, data, "n_bits", self["n_bits_in"] if self["n_bits_in"] == self["n_bits_out"] else -1, _type=int ) utils.init_key(self, data, "n_ones_in", n_ones_in, _type=int) utils.init_key(self, data, "n_ones_out", n_ones_out, _type=int) utils.init_key(self, data, "n_samples", n_samples, _type=int) utils.init_key(self, data, "algorithm", algorithm, _type=str) if not self["algorithm"] in ["random", "balanced", "unique"]: raise Exception( 'Invalid data generation algorithm "' + self["algorithm"] + '", must be one of {"random", "balanced", "unique"}!' ) # If n_ones_in and n_ones_out is not given, automatically calculate # n_ones_in, n_ones_out and n_samples if (self["n_ones_in"] <= 0) and (self["n_ones_out"] <= 0): params = entropy.optimal_parameters( n_samples=self["n_samples"], n_bits_in=self["n_bits_in"], n_bits_out=self["n_bits_out"] ) self["n_samples"] = params["n_samples"] self["n_ones_in"] = params["n_ones_in"] self["n_ones_out"] = params["n_ones_out"] # Automatically choose the optimal number of samples if self["n_samples"] <= 0: self["n_samples"] = entropy.optimal_sample_count( n_bits_out=self["n_bits_out"], n_bits_in=self["n_bits_in"], n_ones_out=self["n_ones_out"], n_ones_in=self["n_ones_in"], )
def __init__(self, data={}, n_bits_in=16, n_bits_out=16, n_ones_in=3, n_ones_out=3, n_samples=-1, algorithm="balanced"): """ Fills the network structure with the given parameters. :param n_bits_in: number of input bits. :param n_bits_out: number of output bits. :param n_ones_in: number of ones in the input per sample. :param n_ones_out: number of ones in the output per sample. :param n_samples: number of samples. If negative, the number of samples with the maximum information are chosen. """ # If "n_bits" is specified, set both n_bits_in and n_bits_out if ("n_bits" in data) and (data["n_bits"] > 0): self["n_bits_in"] = int(data["n_bits"]) self["n_bits_out"] = int(data["n_bits"]) self["n_bits"] = int(data["n_bits"]) else: utils.init_key(self, data, "n_bits_in", n_bits_in, _type=int) utils.init_key(self, data, "n_bits_out", n_bits_out, _type=int) utils.init_key(self, data, "n_bits", self["n_bits_in"] if self["n_bits_in"] == self[ "n_bits_out"] else -1, _type=int) utils.init_key(self, data, "n_ones_in", n_ones_in, _type=int) utils.init_key(self, data, "n_ones_out", n_ones_out, _type=int) utils.init_key(self, data, "n_samples", n_samples, _type=int) utils.init_key(self, data, "algorithm", algorithm, _type=str) if not self["algorithm"] in ["random", "balanced", "unique"]: raise Exception("Invalid data generation algorithm \"" + self["algorithm"] + "\", must be one of {\"random\", \"balanced\", \"unique\"}!") # If n_ones_in and n_ones_out is not given, automatically calculate # n_ones_in, n_ones_out and n_samples if (self["n_ones_in"] <= 0) and (self["n_ones_out"] <= 0): params = entropy.optimal_parameters(n_samples=self["n_samples"], n_bits_in=self["n_bits_in"], n_bits_out=self["n_bits_out"]) self["n_samples"] = params["n_samples"] self["n_ones_in"] = params["n_ones_in"] self["n_ones_out"] = params["n_ones_out"] # Automatically choose the optimal number of samples if self["n_samples"] <= 0: self["n_samples"] = entropy.optimal_sample_count( n_bits_out=self["n_bits_out"], n_bits_in=self["n_bits_in"], n_ones_out=self["n_ones_out"], n_ones_in=self["n_ones_in"])
import binam import data import utils import entropy def cm2inch(value): return value / 2.54 # Parameters n_bits = 96 n_ones = 8 n_samples = entropy.optimal_sample_count(n_bits_in=n_bits, n_bits_out=n_bits, n_ones_in=n_ones, n_ones_out=n_ones) # Generate the input and output data print("Create input data...") X = data.generate(n_bits=n_bits, n_ones=n_ones, n_samples=n_samples) print("Create output data...") Y = data.generate(n_bits=n_bits, n_ones=n_ones, n_samples=n_samples) # Train the BiNAM print("Training BiNAM...") M = binam.BiNAM(n_bits, n_bits) M.train_matrix(X, Y) print("Running experiments...") xs = np.linspace(0.0, 1.0, 100)
# Include the PyNAM folder import __main__ sys.path.append(os.path.join(os.path.dirname(__main__.__file__), "../pynam")) import binam import data import utils import entropy def cm2inch(value): return value / 2.54 # Parameters n_bits = 96 n_ones = 8 n_samples = entropy.optimal_sample_count(n_bits_in = n_bits, n_bits_out = n_bits, n_ones_in=n_ones, n_ones_out = n_ones) # Generate the input and output data print("Create input data...") X = data.generate(n_bits=n_bits, n_ones=n_ones, n_samples=n_samples) print("Create output data...") Y = data.generate(n_bits=n_bits, n_ones=n_ones, n_samples=n_samples) # Train the BiNAM print("Training BiNAM...") M = binam.BiNAM(n_bits, n_bits) M.train_matrix(X, Y) print("Running experiments...") xs = np.linspace(0.0, 1.0, 100) nxs = len(xs)