ich habe mal wieder ein Problem
Und zwar geht es um folgen Code und das verhalten des Netzes dabei.
Code: Select all
ArrayList<String[]> data = rc.getDaten();
// lade Prototyp.mbn
MBDllWrapper.MBLoadNet("SmallTemperingOptimizer.mbn");
//lade Lesson , falls vorhanden
if (MBDllWrapper.MBGetLessonCount()>0)
{
MBDllWrapper.MBLoadLesson("Lesson.mbl");
}
// Name des Netzes wird der Lesson �bergeben
MBDllWrapper.MBNamesFromNet();
// l�sche vorhandene Pattern
if (MBDllWrapper.MBGetLessonSize()<=1)
{
MBDllWrapper.MBDeletePattern();
}
for(int k=0; k<data.get(1).length;k++)
{
String auftragnr=data.get(1)[k];
System.out.println("Auftragnummer= "+auftragnr);
System.out.println("------------------------------------------------------------");
System.out.println("------------------------------------------------------------");
// F�ge der Lesson Pattern hinzu
MBDllWrapper.MBAddPattern();
int Zeile = MBDllWrapper.MBGetLessonSize()-1;
MBDllWrapper.MBSelectPattern(Zeile);
System.out.println(Zeile+"Daten= ");
System.out.println("...................");
String[] temp= new String[28];
for(int i=0; i<temp.length;i++){
if(i<2){
temp[i]=data.get(k+3)[i];
}
else{
if(i<4){
temp[i]=data.get(k+3)[i+5];
}
else{
temp[i]=data.get(k+3)[i+6];
}
}
}
for ( int i=0; i<28; i++)
{
double neuronTrain = 0.0;
try
{
if(i<26)
{
String inputSt=temp[i];
neuronTrain = Double.parseDouble(inputSt);
MBDllWrapper.MBSetPatternInput(i, neuronTrain);
String inName = MBDllWrapper.MBGetLessonInputName(i);
System.out.print(inName+"="+inputSt+" - ");
}
if(i>=26 && i<28)
{
int m=i-26;
String inputSt=temp[i];
neuronTrain = Double.parseDouble(inputSt);
MBDllWrapper.MBSetPatternOutput(m, neuronTrain);
String outName = MBDllWrapper.MBGetLessonOutputName(i);
System.out.println("Output"+m+" ="+inputSt);
}
}
catch
(
NumberFormatException e
) {}
}
}
//Speichere Lesson
MBDllWrapper.MBSaveLessonAs("Lesson.mbl");
//lade TeacherDatei
MBDllWrapper.MBLoadTeacherFile("Teachers.mbt");
//wähle Lern-Algorithmus
MBDllWrapper.MBSelectTeacher("RPROP");
//Training
double Net_Err = MBDllWrapper.MBGetLastNetError();
long z=0;
do
{
int Step = MBDllWrapper.MBTeachStep();
Net_Err = MBDllWrapper.MBGetLastNetError();
System.out.println("Netz_Fehler: "+Net_Err);
System.out.println("TeachStep: "+Step);
System.out.println(z++);
System.out.println("");
}
while (Net_Err > 0.004);//legt genauigkeit fest
//Stoppe das Trainieren
MBDllWrapper.MBStopTeaching();
MBDllWrapper.MBSaveNetAs("SmallTemperingOptimizer.mbn");
Meine Frage ist nun, was in diesem Quellcode falsch ist oder ob in dem Netz fehler sind (das Netz wurde nicht von mir entwickelt, ich soll es nur einbinden).
Wenn ich allerdings das Membrain Programm nutze und dort über den Autoteacher das Netz Trainiere, erreiche ich den erwünschten Netzerror.
Des weiteren würde ich gerne wissen, ab wievielen Pattern man davon ausgehen kann, dass das Netz bei neuen unbekannten Tupeln einem ein recht genaues Ergebniss liefern kann.(evtl gibts ja grobe fix Richtwerte)
Ich freue mich auf jede Antwort die mich einer Lösung näherbringen kann.
Gruß Negi