gpt4 book ai didi

java简单的神经网络设置

转载 作者:IT老高 更新时间:2023-10-28 20:35:50 25 4
gpt4 key购买 nike

我决定在 Java 中尝试一些涉及神经网络的简单概念,并且通过修改我在论坛上找到的一些无用的代码,我已经能够为典型的初学者 XOR 模拟创建一个非常简单的模型:


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;
}
}

在我的主课中,我创建了对 Jeff Heaton 图表建模的简单模拟: XOR diagram

但是,我想确保我对 Neuron 类的实现是正确的。我已经测试了所有可能的输入([true true]、[true false]、[false true]、[false false]),并且他们都通过了我的手动验证。此外,由于这个程序接受输入作为参数,它似乎也通过了手动验证,例如 [true false false]、[true true false] 等。

但从概念上讲,这种实现是否正确?或者在我开始进一步开发和研究这个主题之前,我该如何改进它?

谢谢!

最佳答案

这看起来是一个很好的起点。我确实有一些建议:

  1. 为了可扩展性,应该对 fire() 进行重组,以便已经使用当前输入集触发的神经元不必每次都重新计算。如果您有另一个隐藏层或多个输出节点,就会出现这种情况。

  2. 考虑将阈值计算拆分为自己的方法。然后,您可以将 Neuron 子类化并使用不同类型的激活函数(双极 sigmoid、RBF、线性等)。

  3. 要学习更复杂的函数,请为每个神经元添加一个偏置输入。它基本上就像另一个输入,具有自己的权重值,但输入始终固定为 1(或 -1)。

  4. 不要忘记允许训练方法。反向传播需要类似于 fire() 的逆函数,以获取目标输出并在每一层中波动权重变化。

关于java简单的神经网络设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4719633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com