2016-11-28 2 views
0

Ich schrieb eine Sigmoid-Funktion in Java, die gut funktioniert, wenn es um einzelne Zahlen geht, aber wenn ein Array fehlschlägt nach der ersten Dateneingabe. Hier sind einige Daten, um mein Problem zu veranschaulichen (mit auf 3 Stellen gerundeter Ausgabe).Java Sigmoid Methode gibt falsche Ergebnisse zurück

Input | Correct Output | Output 
     0 |  0.5  | 0.5 
    -1,0 | 0.27,0.5 | 0.27,0.62 
    1,0,-1 | 0.73,0.5,0.27 | 0.73,0.62,0.64 

Mein Code ist wie folgt.

double[] data = { 1, 0, -1 }; 
System.out.println(sigmoid(data)[0] + "," + sigmoid(data)[1] + "," + sigmoid(data)[2]); 

und

double[] sigmoid(double[] data) { 
    for (int i = 0; i < data.length; i++) 
     data[i] = 1/(1 + Math.exp(-data[i])); 
    return data; 
} 

Wenn dies nur ein blöder offensichtliches Versehen meinerseits mir bitte sagen, wie ich stundenlang ohne Erfolg versucht habe, und Dank für alle Antworten überhaupt.

Antwort

1

Während Java einen Wert übergibt, ist der Wert, der an Ihre Funktion übergeben wird, ein Verweis auf das Eingabearray, keine Kopie des Arrays, also ändert Ihre Funktion das Array an Ort und Stelle - jeder Aufruf in Ihrem println aktualisiert Ergebnisse aus dem vorherigen Anruf.

eine Kopie des Arrays Machen Sie Ihre Ergebnisse in zurückzukehren:

static double[] sigmoid(double[] data) { 
    double[] z = Arrays.copyOf(data, data.length); 
    for (int i = 0; i < z.length; i++) 
     z[i] = 1/(1 + Math.exp(-z[i])); 
    return z; 
} 
Verwandte Themen