Tôi đã quyết định chơi với một số khái niệm đơn giản liên quan đến mạng nơron trong Java, và thích ứng với mã phần vô dụng mà tôi tìm thấy trên diễn đàn, tôi có thể tạo ra một mô hình rất đơn giản cho người mới bắt đầu XOR mô phỏng:java thiết lập mạng nơ-ron đơn giản
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;
}
}
trong lớp học chính của tôi, tôi đã tạo ra mô phỏng đơn giản trong sơ đồ mô hình Jeff Heaton của:
Tuy nhiên, tôi muốn đảm bảo thực hiện của tôi cho lớp Neuron là cor rect..Tôi đã thử nghiệm tất cả các yếu tố đầu vào có thể ([true true], [true false], [false true], [false false]) và tất cả đều đã qua xác minh thủ công của tôi. Ngoài ra, vì chương trình này chấp nhận các đầu vào làm đối số, nó cũng có vẻ như chuyển xác minh thủ công cho các đầu vào như [true false false], [true true false], v.v.
Nhưng về mặt khái niệm, việc triển khai này có chính xác không ? Hay làm thế nào tôi có thể cải thiện nó trước khi tôi bắt đầu phát triển và nghiên cứu sâu hơn về chủ đề này?
Cảm ơn bạn!
Chỉ cần để tiết kiệm bộ nhớ trong các ứng dụng lớn hơn mà có CPU cần thiết, nó có thể là tốt hơn để thêm một tốc độ phân hủy, có giá trị có thể được định nghĩa trong một constructor thứ hai – user2425429