Hi,
ich möchte eine Funktionenklasse, z.B. für Gradientenabstieg implementieren. Wie macht man das? Meine Idee sieht so aus:
Eine konkrete Funktion f(x) = w*x + b auf den R^n könnte so aussehen:
Das Attribut w ist hier im speziellen Fall nicht notwendig. Den Gradienten hätte man auch bereits in der Funktion f() setzen können. Bei anderen Funktionen muss man den Gradient etwas aufwändiger berechnen. Deswegen wurde hier eine Implementierung gezeigt, die das für den allgemeinen Fall simulieren soll. Trotzdem finde ich das alles nicht schön. Wie macht man das besser?
ich möchte eine Funktionenklasse, z.B. für Gradientenabstieg implementieren. Wie macht man das? Meine Idee sieht so aus:
Java:
public interface Function {
public double f(Object ...params);
public void df();
}
Eine konkrete Funktion f(x) = w*x + b auf den R^n könnte so aussehen:
Java:
public class Linear {
public double[] gradient;
double[] w;
public double f(Object ...params) {
double[] x = (double[])params[0];
this.w = (double[])params[1];
double b = (Double)params[2];
double y = b;
for(int i = 0; i < x.length; i++) {
y += w[i]*x[i];
}
return y;
}
public void df() {
gradient = w;
}
}
Das Attribut w ist hier im speziellen Fall nicht notwendig. Den Gradienten hätte man auch bereits in der Funktion f() setzen können. Bei anderen Funktionen muss man den Gradient etwas aufwändiger berechnen. Deswegen wurde hier eine Implementierung gezeigt, die das für den allgemeinen Fall simulieren soll. Trotzdem finde ich das alles nicht schön. Wie macht man das besser?
Zuletzt bearbeitet: