/// <summary>
    /// Crée une nouvelle instance de <see cref="NeuralNetwork"/> a partire d'une sauvegarde.
    /// <param name="save">La sauvegarde</param>
    /// </summary>
    public NeuralNetwork(NeuralSave save)
    {
        this.InputsCount              = save.InputsCount;
        this.HiddenLayersCount        = save.HiddenLayersCount;
        this.HiddenLayersNeuronsCount = save.HiddenLayersNeuronsCount;
        this.OutputsCount             = save.OutputsCount;

        /* Initialise le nombre de neurones dans le layers d'entrée. */
        this.Input = new float[this.InputsCount];

        /* Initialise le nombre de layers dans la partie cachée. */
        this.Hidden = new float[this.HiddenLayersCount][];

        /* Initialise le nombre de neurones dans chaque layers de la partie cachée. */
        for (int i = 0; i < this.Hidden.Length; i++)
        {
            this.Hidden[i] = new float[this.HiddenLayersNeuronsCount[i]];
        }

        /* Initialise le nombre de neurones dans le layers de sortie. */
        this.Output = new float[OutputsCount];

        /* Initialise le nombre de dentries qui relie le layers d'entrée et le premier layer de la couche cachée. */
        this.Wi = save.WeightInputs;

        /* Initialise le nombre de dentries qui relie chaque layers de la face cachée entre eux.
         * NOTE : Initialise aussi les poids qui relie la derniere couche caché avec la couche de sortie! */
        this.Wh = save.WeightHidden;
    }
    /// <summary>
    /// Initialise les données via le contenue text d'un fichier json.
    /// <param name="json">Le contenue d'un fichier json</param>
    /// </summary>
    public void FromJson(string json)
    {
        NeuralSave s = JsonConvert.DeserializeObject <NeuralSave>(json);

        this.InputsCount              = s.InputsCount;
        this.HiddenLayersCount        = s.HiddenLayersCount;
        this.HiddenLayersNeuronsCount = s.HiddenLayersNeuronsCount;
        this.OutputsCount             = s.OutputsCount;
        this.WeightInputs             = s.WeightInputs;
        this.WeightHidden             = s.WeightHidden;
        this.dna = s.dna;
    }
    public NeuralSave Save()
    {
        NeuralSave save = new NeuralSave();

        save.InputsCount              = InputsCount;
        save.HiddenLayersCount        = HiddenLayersCount;
        save.HiddenLayersNeuronsCount = HiddenLayersNeuronsCount;
        save.OutputsCount             = OutputsCount;
        save.WeightInputs             = Wi;
        save.WeightHidden             = Wh;

        save.dna = new DNA(this);

        return(save);
    }
Esempio n. 4
0
    // Use this for initialization
    void Start()
    {
        /* Crée un réseau de neurones */
        NeuralNetwork n = new NeuralNetwork(4, 1, new int[] { 4 }, 2);

        /* Initialise le poids des dentries */
        n.InitializeWeight();

        /* Présente a l'entrée des valeurs */
        n.SetInput(new float[] { 0, 1, 0, 1 });

        /* Propage les donnés de l'entrées vers la sortie */
        n.Propagate();

        /* Récupere les valeurs des neurones de sortie */
        var r = n.GetOutput();

        /* Affihe les valeurs */
        foreach (var result in r)
        {
            Debug.Log(result);
        }

        /* Sauvegarde le reseau de neurones */
        var save = n.Save();

        /* Le fichier JSON ou seras stocker la sauvegarde du reseau de neurones */
        string path = "/Users/alexis/Desktop/NeuralNetwork.json";

        /* Detruit le fichier si il existe deja */
        if (File.Exists(path))
        {
            File.Delete(path);
        }

        /* Crée et ouvre le fichier */
        var fs = File.OpenWrite(path);

        /* Recupere les données de la sauvegarde dans un tableau de byte */
        var data = System.Text.Encoding.UTF8.GetBytes(save.ToJson());

        /* Ecris dans le fichier les données */
        fs.Write(data, 0, data.Length);

        /* Libère les ressources */
        fs.Close();

        fs = File.OpenRead(path);
        List <byte> dataRead = new List <byte>();

        byte[] buffer     = new byte[256];
        int    readResult = 0;

        do
        {
            readResult = fs.Read(buffer, 0, buffer.Length);
            System.Array.Resize(ref buffer, readResult);
            dataRead.AddRange(buffer);
        }while(readResult > 0);

        save = new NeuralSave();
        save.FromJson(System.Text.Encoding.UTF8.GetString(dataRead.ToArray()));

        n = new NeuralNetwork(save);

        n.InitializeWeight(save.dna);

        /* Présente a l'entrée des valeurs */
        n.SetInput(new float[] { 0, 1, 0, 1 });

        /* Propage les donnés de l'entrées vers la sortie */
        n.Propagate();

        /* Récupere les valeurs des neurones de sortie */
        r = n.GetOutput();

        /* Affihe les valeurs */
        foreach (var result in r)
        {
            Debug.Log(result);
        }
    }