###質問内容
javaを使った3層ニューラルネットワークを構築していますが出力の値がおかしくなってしまいそれにより誤差もおかしくなり一応の収束はするのですが正答率が低いモノとなってしまいます
コードのどこが問題かわからず質問させてもらいました。
###コード
Java
1 //終了条件 2 double ipusiron = 0.001; 3 //入力数 4 int n = 19; 5 //隠れ層の数 6 int m = 5; 7 //出力 8 int l = 3; 9 //データ数 10 int num =27; 11//シグモイド関数 12 double sigumoido; 13 sigumoido = 1/1 + Math.pow(Math.E,-1); 14//重みの初期値 15 for( i = 0; i < n - 1; i++){ 16 for( j = 1; j < m; j++){ 17 w[i][j] = 0.1; 18 } 19 } 20 for( j = 0; j < m; j++){ 21 for( k = 1; k < l; k++){ 22 v[j][k] = 0.1; 23 } 24 } 25//入力 26 double X[][]; 27//正解のセット 28 double d[][]; 29//学習 30while(E >= ipusiron){ 31//出力リセット 32 for(X1 = 0; X1 < num; X1++){ 33 for(k = 0; k < l; k++){ 34 hk[X1][k] = 0; 35 } 36 } 37//ここから計算 38 for(x1 = 0; x1 < num; x1++){ 39//X[num][n]の中身を格納 40 for(x2 = 0; x2 < n-1; x2++){ 41 feature[x2] = X[x1][x2]; 42 } 43//隠れ素子の出力を求める 44 for(j =1;j<m;j++){ 45 for(x2 =0; x2 < n - 1; x2++){ 46 fj[x1][j] += w[x2][j]*feature[x2]; 47 } 48 fj[x1][j] += w[0][j]; 49 fj[x1][j] = sigumoido * fj[x1][j]; 50 } 51//出力素子の出力を求める 52 for(k = 0; k < l; k++){ 53 for(j = 0; j < m; j++){ 54 hk[x1][k] += v[j][k] * fj[x1][j]; 55 } 56 hk[x1][k] = hk[x1][k] + v[0][k]; 57 hk[x1][k] = sigumoido * hk[x1][k]; 58 } 59//修正誤差を求める 60 sanogoukei = 0; 61 for(j = 1; j < m; j++){ 62 for(k = 1; k < l; k++){ 63 delta2[x1][k] = (hk[x1][k] - d[x1][k]) 64 * hk[x1][k] 65 * (1-hk[x1][k]); 66 } 67 68 for(k = 1; k < l; k++){ 69 SIGUMAdelta2 += delta2[x1][k] * v[j][k]; 70 71 } 72 delta1[x1][j] = SIGUMAdelta2 * fj[x1][j] 73 * (1 - fj[x1][j]); 74 75 SIGUMAdelta2 = 0; 76 } 77//重み修正の最大値delta_maxを求める 78 double delta_max = 0; 79 for(X1 = 0;X1 < num; X1++){ 80 fj[X1][0] = 1; 81 } 82//Vjk 83 for(j = 0;j<m;j++){ 84 for(k=1;k<l;k++){ 85 deltaV[j][k] += delta2[x1][k] * fj[x1][j]; 86 if(deltaV[j][k] > delta_max){ 87 delta_max = deltaV[j][k]; 88 } 89 } 90 } 91//Wij 92 for(i = 0; i < n - 1; i++){ 93 for(j = 0;j<m;j++){ 94 deltaW[i][j] += delta1[x1][j] * feature[i]; 95 if(deltaW[i][j] > delta_max){ 96 delta_max = deltaW[i][j]; 97 } 98 } 99 } 100//time = 0.1 101 delta = time/delta_max; 102//重みの更新 103 for(j = 0;j<m;j++){ 104 for(k = 1; k < l; k++){ 105 v[j][k] = v[j][k] - delta * deltaV[j][k]; 106 } 107 } 108 for( i = 0; i < n - 1 ; i++){ 109 for( j = 1; j < m; j++){ 110 w[i][j] = w[i][j] - delta * deltaW[i][j]; 111 } 112 } 113 }//for(x1 = 0; x1 < num; x1++) 114 115//誤差の計算 116E = 0; 117 for(X1 = 0; X1 < num; X1++){ 118 for(k = 1; k < l; k++){ 119 gosa = hk[X1][k] - d[X1][k]; 120 gosa = Math.pow(gosa, 2); 121 } 122 gosa = 0; 123 } 124 E = 1.0 / (2 * n-1) * E; 125}//while(E >= ipusiron) 126
###出力(最終的なhk[num][l]の中身)
0.0
52.3957068057971
8.700271583398967
0.0
48.27491048001723
8.014032345204052
1
0.0
48.930419819803085
8.117433543441596
0.0
45.878823843881165
7.609130343072176
0.0
26.430757542424388
4.397580242793037
0.0
47.716896708863565
7.903124926271077
0.0
31.068050591827877
5.156303364194832
0.0
44.153728511903495
7.307359602475295
0.0
47.893902095154594
7.918382861703904
0.0
41.56291579336123
6.8728580589037005
0.0
41.581790522937055
6.871964727776629
0.0
25.186943791913674
4.175545385559397
0.0
23.714109897044633
3.9313972283105834
0.0
23.697277382466666
3.9263564485921427
0.0
52.8126101726759
8.696950543684412
0.0
29.246170566475637
4.830993883972675
0.0
44.650085656316286
7.350529271353912
0.0
44.14167602257152
7.2631707905116105
0.0
43.61061424748054
7.172221229123673
0.0
51.50007004329875
8.457809439640187
0.0
53.107583544353055
8.715773852424826
0.0
25.79998076815934
4.252286337267481
0.0
42.940534996673996
7.047241584036438
0.0
41.74210378336586
6.8479962382230335
0.0
61.591296309073705
10.080033339472793
0.0
38.16786464637572
6.258650329871518
0.0
38.53740449580547
6.3158049507619785
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。