PDA

View Full Version : Problema rete neurale Encog


imperator62
04-09-2013, 17:11
salve a tutti, per iniziare sono nuovo di questo forum, spero di non aver sbagliato sezione, XD.
io ho un problema con un rete neruale, la mai rete deve prendere un set di 39 valori iningresso e restituirmene 3 in uscita, ho costruito la rete con 39 neuroni in ingresso du livelli nascsti con 75 e 50 neuroni e 3 neuroni d'uscita, ho provato ad addestrare la rete con circa 200 tipi di ingresso uscita ma intanto l'errore che mi da è spropositato, e circa 7750, e poi ho notota che comunque l'addestri , cioe con qualsiasi tipo di ingresso uscita, la risposta della rete è sempre un numero molto vicino a 1.

grazie per l'attenzione, attendo la risposta con impazione , aiutatemi devo finire il lavoro entro dopo domani perchè devo consegare la tesi sono disperato :muro: :muro: :muro: :ave: :ave:

OoZic
04-09-2013, 21:08
"per me è la cipolla" cit.

imperator62
04-09-2013, 22:43
intanto cheido scusa ,questo è il codice, sostanzialmente non so se ho sbagliato a costruire la rete, se ho sbagliato ad addestrarla, se devo impostare in qualche modo il neurone di output perchè non mi dia solo 1 come segnale di uscita.
qualsiasi aiuto è ben acceto. grazie ancora.


public static void main(final String args[]) {
/*double[][] tmp=new double[In.length][20];
for(int i =0;i< In.length;i++){
for (int j=0; j<In[i].length;j++){
if(j<tmp[i].length){
tmp[i][j]=In[i][j];
}
}

}*/


// create a neural network, without using a factory
BasicNetwork network = new BasicNetwork();
network.addLayer(new BasicLayer(null,false,39));//TODO
network.addLayer(new BasicLayer(new ActivationSigmoid(),true,75));
network.addLayer(new BasicLayer(new ActivationSigmoid(),true,40));
network.addLayer(new BasicLayer(new ActivationSigmoid(),true,3));
network.getStructure().finalizeStructure();
network.reset();

/*BasicNetwork network = new BasicNetwork();
network.addLayer(new BasicLayer(39));//TODO
//network.addLayer(new BasicLayer(64));
network.addLayer(new BasicLayer(15));
//network.addLayer(new BasicLayer(64));
//network.addLayer(new BasicLayer(40));
network.addLayer(new BasicLayer(1));
network.getStructure().finalizeStructure();
network.reset();
*/
// create training data
MLDataSet trainingSet = new BasicMLDataSet (INPUT,OUTPUT);
//Load a network:
File f=new File("C:/Users/Imperator6/Desktop/prova NN/Test");
EncogDirectoryPersistence.saveObject(f, network);
//network=(BasicNetwork) EncogDirectoryPersistence.loadObject(f);
// train the neural network
final MLTrain train = new Backpropagation(network, trainingSet,0.3,0.7);


int epoch = 1;

do {

train.iteration();
System.out
.println("Epoch #" + epoch + " Error:" + train.getError());
epoch++;
} while(train.getError() >10&& epoch<10000);


//EncogPersistedCollection encog = new EncogPersistedCollection(MarketLoaderStrategy.LoadedConfig.FILENAME, FileMode.Open);
/*Load a network:

EncogPersistedCollection encog = new EncogPersistedCollection(MarketLoaderStrategy.LoadedConfig.FILENAME, FileMode.Open);
BasicNetwork network = (BasicNetwork)encog.Find(MarketLoaderStrategy.LoadedConfig.MARKET_NETWORK);

Save a network:

Just replace the .Find to .Save .

Then you can just load / save
*/
// test the neural network
System.out.println("Neural Network Results:");
for(MLDataPair pair: trainingSet ) {
final MLData output = network.compute(pair.getInput());
System.out.println(pair.getInput().getData(0) + "," + pair.getInput().getData(1)+pair.getInput().getData(2)
+" ,max: "+output.getData(2)+",med: "+output.getData(0)+", min: "+output.getData(1)+ " Max" + pair.getIdeal().getData(0)+" Min "+pair.getIdeal().getData(1));
}