He decidido jugar con algunos conceptos simples que involucran redes neuronales en Java, y al adaptar el código algo inútil que encontré en un foro, he podido crear un modelo muy simple para principiantes típicos simulación XOR:configuración de red neuronal java simple
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;
}
}
en mi clase principal, he creado la simulación sencilla en el diagrama de modelado de Jeff Heaton:
Sin embargo, quería asegurarse de que mi aplicación para la clase de neurona es cor rect .. Ya he probado todas las entradas posibles ([true true], [true false], [false true], [false false]), y todas pasaron mi verificación manual. Además, dado que este programa acepta las entradas como argumentos, también parece pasar la verificación manual de entradas como [verdadero falso falso], [verdadero verdadero falso], etc.
Pero conceptualmente hablando, ¿sería correcta esta implementación? ? ¿O cómo puedo mejorarlo antes de comenzar un mayor desarrollo e investigación sobre este tema?
¡Gracias!
sólo para ahorrar memoria en aplicaciones más grandes que tienen la CPU es necesario, puede ser que sea mejor añadir una tasa de atenuación, cuyo valor se puede definir en un segundo constructor – user2425429