Ho deciso di giocare con alcuni concetti semplici che riguardano reti neurali in Java e, nell'adattare un codice un po 'inutile che ho trovato su un forum, sono stato in grado di creare un modello molto semplice per i principianti tipici simulazione XOR:java semplice configurazione di rete neurale
public class MainApp {
public static void main (String [] args) {
Neuron xor = new Neuron(0.5f);
Neuron left = new Neuron(1.5f);
Neuron right = new Neuron(0.5f);
left.setWeight(-1.0f);
right.setWeight(1.0f);
xor.connect(left, right);
for (String val : args) {
Neuron op = new Neuron(0.0f);
op.setWeight(Boolean.parseBoolean(val));
left.connect(op);
right.connect(op);
}
xor.fire();
System.out.println("Result: " + xor.isFired());
}
}
public class Neuron {
private ArrayList inputs;
private float weight;
private float threshhold;
private boolean fired;
public Neuron (float t) {
threshhold = t;
fired = false;
inputs = new ArrayList();
}
public void connect (Neuron ... ns) {
for (Neuron n : ns) inputs.add(n);
}
public void setWeight (float newWeight) {
weight = newWeight;
}
public void setWeight (boolean newWeight) {
weight = newWeight ? 1.0f : 0.0f;
}
public float getWeight() {
return weight;
}
public float fire() {
if (inputs.size() > 0) {
float totalWeight = 0.0f;
for (Neuron n : inputs) {
n.fire();
totalWeight += (n.isFired()) ? n.getWeight() : 0.0f;
}
fired = totalWeight > threshhold;
return totalWeight;
}
else if (weight != 0.0f) {
fired = weight > threshhold;
return weight;
}
else {
return 0.0f;
}
}
public boolean isFired() {
return fired;
}
}
nella mia classe principale, ho creato la simulazione semplice schema di modellazione Jeff Heaton:
Tuttavia, ho voluto garantire la mia implementazione per la classe Neuron è cor rect..ho già testato tutti i possibili input ([true true], [true false], [false true], [false false]), e hanno tutti superato la mia verifica manuale. Inoltre, poiché questo programma accetta gli input come argomenti, sembra anche passare la verifica manuale per input come [true false false], [true true false], ecc.
Ma concettualmente, questa implementazione sarebbe corretta ? O come posso migliorarlo prima di iniziare ulteriori sviluppi e ricerche su questo argomento?
Grazie!
solo per salvare la memoria in applicazioni di grandi dimensioni che hanno la CPU necessarie, potrebbe essere meglio per aggiungere un tasso di decadimento, il cui valore può essere definito in un secondo costruttore – user2425429