這是我的代碼報表不運行,因爲它是
import java.lang.Math;
public class Demo {
// inputs are declared
private int x[]={1,0,1,0};
//weights are declared
private double w[]={0.4,0.6,0.7,0.8};
private double temp;
private double z=0;
private int desiredOutput=0;
private double actualOutput=0;
private double error=0;
private double definedValue=0.004;
private double weightChange[]={0,0,0,0};
private double learningRate=0.7;
public void calculate(){
System.out.println("hi");
for(int i=0; i<w.length; i++){
temp=0;
temp=x[i]*w[i];
z+=temp;
System.out.println("Z value"+z);
}
actualOutput=1/(1+Math.exp(-z));
System.out.println("actualOutput "+actualOutput);
if(actualOutput!=desiredOutput){
calculateError();
}
else{
printWeights();
}
}
public void calculateError(){
error=0.5*(desiredOutput-actualOutput)*(desiredOutput-actualOutput);
System.out.println("error "+error);
checkingCondition();
//error=0.003;
}
public void checkingCondition(){
if(error<definedValue){
printWeights();
} else {
balanceWeights();
}
}
public void balanceWeights(){
for(int i=0;i<w.length;i++){
weightChange[i]=((-learningRate)*(desiredOutput-actualOutput)*actualOutput*(1-actualOutput)*x[i]);
System.out.println(weightChange[i]);
w[i]=w[i]+weightChange[i];
}
calculate();
}
public void printWeights(){
System.out.print("The balanced weights are:");
for(int i=0;i<4;i++){
System.out.print(w[i]+"\t");
}
}
}
這是我的主類
public class Main {
public static void main(String[] args) {
Demo object= new Demo();
object.calculate();
}
}
但沒有打印出「你好」,我用來檢查運行第一種方法的運行路徑,編譯器執行在第一個調用方法中調用的其他方法,並在下一次調用時打印「hi」
這是輸出的初始部分我得到
Z value1543.3571456014363
Z value1544.2242990218328
Z value1544.2242990218328
actualOutput 1.0
error 0.5
0.0
0.0
0.0
0.0
hi
Z value1544.7914524422295
Z value1544.7914524422295
Z value1545.658605862626
Z value1545.658605862626
actualOutput 1.0
error 0.5
0.0
0.0
0.0
0.0
hi
Z value1546.2257592830226
Z value1546.2257592830226
Z value1547.0929127034192
Z value1547.0929127034192
actualOutput 1.0
error 0.5
0.0
0.0
0.0
0.0
hi
Z value1547.66006612
在在輸出的最後一部分這些錯誤給
hi
Z value1861.77326425752
Z value1861.77326425752
Z value1862.6404176779165
Z value1862.6404176779165
actualOutput 1.0
Exception in thread "main" java.lang.StackOverflowError
at sun.misc.FloatingDecimal$BinaryToASCIIBuffer.dtoa(FloatingDecimal.java:431)
at sun.misc.FloatingDecimal$BinaryToASCIIBuffer.access$100(FloatingDecimal.java:259)
at sun.misc.FloatingDecimal.getBinaryToASCIIConverter(FloatingDecimal.java:1785)
at sun.misc.FloatingDecimal.getBinaryToASCIIConverter(FloatingDecimal.java:1738)
at sun.misc.FloatingDecimal.appendTo(FloatingDecimal.java:89)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:709)
at java.lang.StringBuilder.append(StringBuilder.java:226)
at Neural4.Demo.calculateError(Demo.java:55)
at Neural4.Demo.calculate(Demo.java:41)
at Neural4.Demo.balanceWeights(Demo.java:84)
at Neural4.Demo.checkingCondition(Demo.java:68)
at Neural4.Demo.calculateError(Demo.java:56)
at Neural4.Demo.calculate(Demo.java:41)
at Neural4.Demo.balanceWeights(Demo.java:84)
at Neural4.Demo.checkingCondition(Demo.java:68)
at Neural4.Demo.calculateError(Demo.java:56)
at Neural4.Demo.calculate(Demo.java:41)
at Neural4.Demo.balanceWeights(Demo.java:84)
at Neural4.Demo.checkingCondition(Demo.java:68)
at Neural4.Demo.calculateError(Demo.java:56)
at Neural4.Demo.calculate(Demo.java:41)
at Neural4.Demo.balanceWeights(Demo.java:84)
at Neural4.Demo.checkingCondition(Demo.java:68)
at Neural4.Demo.calculateError(Demo.java:56)
at Neural4.Demo.calculate(Demo.java:41)
at Neural4.Demo.balanceWeights(Demo.java:84)
at Neural4.Demo.checkingCondition(Demo.java:68)
at Neural4.Demo.calculateError(Demo.java:56)
at Neural4.Demo.calculate(Demo.java:41)
at Neural4.Demo.balanceWeights(Demo.java:84)
at Neural4.Demo.checkingCondition(Demo.java:68)
at Neural4.Demo.calculateError(Demo.java:56)
at Neural4.Demo.calculate(Demo.java:41)
at Neural4.Demo.balanceWeights(Demo.java:84)
爲什麼會這樣,當變量desiredOutput
設置爲1
代碼運行正常,當它被設置爲問題就來了0
你知道如何使用調試器嗎? – Andremoniy
比較浮點與'=='你需要檢查http://stackoverflow.com/questions/1088216/whats-wrong-with-using-to-compare-floats-in-java – Antoniossss
謝謝它得到了工作 –