示例#1
0
    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"],
            )
示例#2
0
文件: network.py 项目: kushs123/pynam
    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"])
示例#3
0
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)
示例#4
0
# 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)