float learningRate = 0.001; // δοκιμάζουμε διάφορες μικρές τιμές int epochs = 200; // δοκιμάζουμε διάφορες τιμές. Υπερβολικά μεγάλος αριθμός οδηγεί σε overfitting. int trainDataNo = 100000; // πλήθος δεδομένων (data rows) για εκπαίδευση float clip = 5.0; float[][] trainData = new float[trainDataNo][inputNo]; // πίνακας για να φορτωθούν τα δεδομένα εκπαίδευσης // γραμμή = data row (σετ τιμών για τους input nodes) float[][] targets = new float[trainDataNo][outputNo]; // πίνακας για τα αναμενόμενα αποτελέσματα (3 classes) // ΥΠΟΛΟΓΙΣΜΟΣ κ ΔΙΟΡΘΩΣΗ ΛΑΘΩΝ (backpropagation) // Πίνακες λαθών float[] eo = new float[outputNo]; // error για κάθε output node k = outputs[k] - targets[k] float[] eh3 = new float[hidden3No]; // error για κάθε hidden 3 node = υπολογίζεται ως άθροισμα τμημάτων όλων των output errors float[] eh2 = new float[hidden2No]; // error για κάθε hidden 2 node = υπολογίζεται ως άθροισμα τμημάτων όλων των hidden 2 errors float[] eh1 = new float[hidden1No]; // error για κάθε hidden 1 node = υπολογίζεται ως άθροισμα τμημάτων όλων των hidden 1 errors // Πίνακες gradients float[] go = new float[outputNo]; // gradient για κάθε output node float[] gh3 = new float[hidden3No]; // gradient για κάθε hidden 3 node float[] gh2 = new float[hidden2No]; // gradient για κάθε hidden 2 node float[] gh1 = new float[hidden1No]; // gradient για κάθε hidden 1 node //-------------- CALCULATE ERRORS void calculateOutputError(int k) { for (int i=0; i