-- File name: store, & possibly read, network values from this file
Weight_File_Name : String := "rem.wgt";
withprocedure Get_Input (Pattern : in Positive; Input : out Node_Set; Desired : out Node_Set);
-- Gets an input pattern & associated desired output pattern for this pattern #
-- Called during initialization & by Respond
-- IMPORTANT:
-- Since Get_Input is called during the initialization of this package, it must have been elaborated before this package
-- is instantiated
-- In practical terms, this means the procedure body of the actual procedure associated with Get_Input must occur before
-- the instantiation of this package
package REM_NN is
subtype Output_Id is Positive range1 .. Num_Output_Nodes;
subtype Output_Set is Node_Set (Output_Id);
procedure Respond (Pattern : in Positive; Output : out Output_Set);
-- Calls Get_Input for this pattern #, and propagates the input through the network to obtain the network's response
procedure Train;
-- Propagates error & derivative backward through the network, & updates the network's weights
procedure Save_Weights;
-- Saves the network's values in the files with supplied names
Invalid_Architecture : exception;
-- This package can be initialized with Num_Hidden_Nodes = 0 and Input_To_Output_Connections = False
-- That combination represents an invalid network architecture
-- The initialization of this package checks for this condition, and raises Invalid_Architecture if it exists
end REM_NN;
end PragmARC.REM_NN_Wrapper;
--
-- This is free software; you can redistribute it and/or modify it under
-- terms of the GNU General Public License as published by the Free Software
-- Foundation; either version 2, or (at your option) any later version.
-- This software is distributed in the hope that it will be useful, but WITH
-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- for more details. Free Software Foundation, 59 Temple Place - Suite
-- 330, Boston, MA 02111-1307, USA.
--
-- As a special exception, if other files instantiate generics from this
-- unit, or you link this unit with other files to produce an executable,
-- this unit does not by itself cause the resulting executable to be
-- covered by the GNU General Public License. This exception does not
-- however invalidate any other reasons why the executable file might be
-- covered by the GNU Public License.
Comme vous pouvez le voir, bon nombre des paramètres génerique du paqutage REM_NN sont initialisés par défaut.
J'instancie toujours ce paquetage de la même manière : (les autre paramettre ne me sont pas utile).
Code :
package NN_Expl isnew REM_NN
(
Num_Input_Nodes => N
Num_Hidden_Nodes => M
Num_Output_Nodes => N
Num_Patterns => Count
New_Random_Weights => False
Input_To_Output_Connections => False,
Weight_File_Name => Network.id.all & ".wgt"
Get_Input => Get_Data
);
Dans le but gérer un ensemble de réseaux, j'écris une sous-bibliothèque d'exploitation de REM_NN et j'aimerais avoir votre avis sur sa spécification.
Voici ce que j'ai écris :
Code :
ith PragmARC.REM_NN_Wrapper;
use PragmARC.REM_NN_Wrapper;
generic
Width : Positive := 32;
Depth : Positive := 17;
package Np.Arti.Neural_Networkis
type Network_Type(id : access string)is
record
RMS_Error : Real := 1.0;
Converged : Real := 0.0;
Current_Epoch : Integer := 0;
Max_Epochs : Integer := 5000;
endrecord;
type Network_Access isaccessall Network_Type;
subtype Register_Type is Node_Set(1..Width*Depth);
type Stack_Type isarray(Positive <> )of Register_Type;
type Stack_Access isaccessall Stack_Type;
task Nn_Train_Manager is
entry Train(Network : in Network_Access;
From : in Stack_Access;
Num_Patterns : in Positive);
entry status(Id : in String;
RMS_Error : out Real;
Current_Epoch : out Integer);
entry Finalize(id : in string);
entry Halt;
end Nn_Train_Manager;
function Respond(Input : in Register_Type;
Id : in String)return Register_Type;
end Np.Arti.Neural_Network;
L'entrée "Status" de la tache Nn_Train_Manager me permettra de savoir si l'apprentissage est terminé ou dans quel état il se trouve. Id est le nom unique du propriétaire du réseau.
Cela vous semble t-il cohérent ? Si non pourquoi ? Vous feriez comment ? Merci de votre contribution.
Edit : Je rajoute une entrée de tache Finalize pour supprimer le réseau de la liste en fin d'apprentissage.
Message édité par Profil supprimé le 04-03-2011 à 00:20:35
Marsh Posté le 03-03-2011 à 23:53:52
Bonjour,
Je poste dans divers pour avoir plus de chance.
Je souhaiterais avoir votre avis sur mon développement.
Je développe, avec le langage Ada, un agent de dialogue basé sur l'exploitation des réseaux de neurones.
Je n'ai pas écrit le réseau moi même. J'utilise la bibliothèque de PragmARC REM_NN_Wrapper dont voici la spécification.
Comme vous pouvez le voir, bon nombre des paramètres génerique du paqutage REM_NN sont initialisés par défaut.
J'instancie toujours ce paquetage de la même manière : (les autre paramettre ne me sont pas utile).
Dans le but gérer un ensemble de réseaux, j'écris une sous-bibliothèque d'exploitation de REM_NN et j'aimerais avoir votre avis sur sa spécification.
Voici ce que j'ai écris :
L'entrée "Status" de la tache Nn_Train_Manager me permettra de savoir si l'apprentissage est terminé ou dans quel état il se trouve.
Id est le nom unique du propriétaire du réseau.
Cela vous semble t-il cohérent ?
Si non pourquoi ?
Vous feriez comment ?
Merci de votre contribution.
Edit : Je rajoute une entrée de tache Finalize pour supprimer le réseau de la liste en fin d'apprentissage.
Message édité par Profil supprimé le 04-03-2011 à 00:20:35