質問編集履歴

1

誤字訂正

2022/11/20 12:45

投稿

mikoto115
mikoto115

スコア2

test CHANGED
File without changes
test CHANGED
@@ -24,7 +24,68 @@
24
24
  yy = xx[:, 0] ~ xx[:, 1]
25
25
  return deta1
26
26
 
27
+ # 重みの学習
28
+ def weightlearning(wwold, errork, xxk, eta):
29
+ wwnew = wwold + eta*errork*xxk
30
+
31
+ return wwnew
32
+
33
+ # 線形結合器
34
+ def linearcombiner(ww, xxk):
35
+ y = np.dot(ww,xxk)
36
+
37
+ return y
38
+
39
+ # 平均誤り
40
+ def checkerrorrate(error, shiftlen, k):
41
+ if(k>shiftlen):
42
+ errorshift = np.abs(error[k+1-shiftlen:k])
43
+ else:
44
+ errorshift = np.abs(error[0:k])
45
+ errorave = np.average(errorshift)
46
+
47
+ return errorave
48
+
49
+ # ステップ関数
50
+ def stepfunction(x):
51
+ if x>=0:
52
+ return 1
53
+ else:
54
+ return 0
55
+
56
+ # メイン関数
57
+ def main():
58
+ eta = 5.0e-1
59
+ epsilon = 0.001
60
+ shiftlen = 100
61
+ # データを読み込む.
27
- print(preparedata)
62
+ notgatedata = deta1
63
+ xx = notgatedata["x"]
64
+ kk, nn = xx.shape
65
+ one = np.ones([kk,1])
66
+ xx = np.concatenate((one, xx), 1)
67
+ kk, nn = xx.shape
68
+ zztrue = notgatedata["y"]
69
+ print("zztrue size=", zztrue.shape)
70
+ # 繰返し:学習過程
71
+ wwold = [0.0, 0.0, 0.0]
72
+ error = np.zeros(kk)
73
+ errorave = np.zeros(kk)
74
+ ww = np.empty([kk,nn])
75
+ for k in range(kk):
76
+ yyk = linearcombiner(wwold, xx[k])
77
+ zzk = stepfunction(yyk)
78
+ error[k] = zztrue[k] - zzk
79
+ errorave[k] = checkerrorrate(error, shiftlen, k)
80
+ print("k={0} zztrue={1:.4f} zz={2:.4f} errorave={3:.8f}".format(k, zztrue[k], zzk, errorave[k]))
81
+ if(k>shiftlen and errorave[k]<epsilon):
82
+ break
83
+ wwnew = weightlearning(wwold, error[k], xx[k], eta)
84
+ wwold = wwnew
85
+ ww[k,:] = wwold
86
+ # 重みの学習結果を表示
87
+ print("重みの学習結果: w0=", wwold[0], "w1=", wwold[1], "w2=", wwold[2])
88
+
28
89
  ```
29
90
 
30
91