質問編集履歴
7
軽微な修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -112,7 +112,7 @@
|
|
112
112
|
|
113
113
|
self.W1 -= self.lr * np.dot(idata.T, delta_xh)
|
114
114
|
|
115
|
-
self.b1 -= self.lr * np.sum(delta_xh)
|
115
|
+
self.b1 -= self.lr * np.sum(delta_xh, axis=0)
|
116
116
|
|
117
117
|
|
118
118
|
|
6
画像の修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -850,13 +850,13 @@
|
|
850
850
|
|
851
851
|
** 誤差の収束状況 **
|
852
852
|
|
853
|
-
![イメージ説明](
|
853
|
+
![イメージ説明](aaefc2f831ce8f00bc7681fdedde06e2.png)
|
854
854
|
|
855
855
|
|
856
856
|
|
857
857
|
** 学習後テストデータとニューラルネットワークの出力 **
|
858
858
|
|
859
|
-
![イメージ説明](
|
859
|
+
![イメージ説明](eba87a46a8bf25387a5c065795176b7c.png)
|
860
860
|
|
861
861
|
赤:テストデータ
|
862
862
|
|
5
バイアス項を追加しました.
test
CHANGED
File without changes
|
test
CHANGED
@@ -52,8 +52,12 @@
|
|
52
52
|
|
53
53
|
self.W1 = 0.1*np.random.randn(self.inodes, self.hnodes)
|
54
54
|
|
55
|
+
self.b1 = np.zeros((1, self.hnodes))
|
56
|
+
|
55
57
|
self.W2 = 0.1*np.random.randn(self.hnodes, self.onodes)
|
56
58
|
|
59
|
+
self.b2 = np.zeros(self.onodes)
|
60
|
+
|
57
61
|
#
|
58
62
|
|
59
63
|
def backprop(self, idata, tdata):
|
@@ -66,7 +70,7 @@
|
|
66
70
|
|
67
71
|
# input =>> hidden
|
68
72
|
|
69
|
-
xh = np.dot(idata, self.W1)
|
73
|
+
xh = np.dot(idata, self.W1) + self.b1
|
70
74
|
|
71
75
|
mask = (xh <= 0.0)
|
72
76
|
|
@@ -78,7 +82,7 @@
|
|
78
82
|
|
79
83
|
# hidden =>> output
|
80
84
|
|
81
|
-
xo = np.dot(yh, self.W2)
|
85
|
+
xo = np.dot(yh, self.W2) + self.b2
|
82
86
|
|
83
87
|
yo = np.array(xo, ndmin=2)
|
84
88
|
|
@@ -96,6 +100,8 @@
|
|
96
100
|
|
97
101
|
self.W2 -= self.lr * np.dot(yh.T, eo)
|
98
102
|
|
103
|
+
self.b2 -= self.lr * np.sum(eo)
|
104
|
+
|
99
105
|
|
100
106
|
|
101
107
|
# hidden =>> input
|
@@ -106,6 +112,8 @@
|
|
106
112
|
|
107
113
|
self.W1 -= self.lr * np.dot(idata.T, delta_xh)
|
108
114
|
|
115
|
+
self.b1 -= self.lr * np.sum(delta_xh)
|
116
|
+
|
109
117
|
|
110
118
|
|
111
119
|
return eo**2
|
@@ -120,7 +128,7 @@
|
|
120
128
|
|
121
129
|
# input =>> hidden
|
122
130
|
|
123
|
-
xh = np.dot(idata, self.W1)
|
131
|
+
xh = np.dot(idata, self.W1) + self.b1
|
124
132
|
|
125
133
|
mask = (xh <= 0.0)
|
126
134
|
|
@@ -132,7 +140,7 @@
|
|
132
140
|
|
133
141
|
# hidden =>> output
|
134
142
|
|
135
|
-
xo = np.dot(yh, self.W2)
|
143
|
+
xo = np.dot(yh, self.W2) + self.b2
|
136
144
|
|
137
145
|
yo = np.array(xo, ndmin=2)
|
138
146
|
|
@@ -256,7 +264,7 @@
|
|
256
264
|
|
257
265
|
train_size = x_train.shape[0]
|
258
266
|
|
259
|
-
batch_size = 10
|
267
|
+
batch_size = 10
|
260
268
|
|
261
269
|
train_loss_list = []
|
262
270
|
|
4
画像の修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -842,13 +842,13 @@
|
|
842
842
|
|
843
843
|
** 誤差の収束状況 **
|
844
844
|
|
845
|
-
![イメージ説明](
|
845
|
+
![イメージ説明](75da0563d6495f01b519e064dbe7a7b4.png)
|
846
846
|
|
847
847
|
|
848
848
|
|
849
849
|
** 学習後テストデータとニューラルネットワークの出力 **
|
850
850
|
|
851
|
-
![](
|
851
|
+
![イメージ説明](1454c3c2387b6f22ead44dd5d9e7bc91.png)
|
852
852
|
|
853
853
|
赤:テストデータ
|
854
854
|
|
3
プログラムの修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -298,9 +298,9 @@
|
|
298
298
|
|
299
299
|
batch_mask = np.random.choice(train_size, batch_size)
|
300
300
|
|
301
|
-
i_data[:,0] = x_train[
|
301
|
+
i_data[:,0] = x_train[batch_mask]
|
302
|
-
|
302
|
+
|
303
|
-
t_data[:,0] = t_train[
|
303
|
+
t_data[:,0] = t_train[batch_mask]
|
304
304
|
|
305
305
|
|
306
306
|
|
2
現状の説明を追記しました
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,4 +1,14 @@
|
|
1
|
-
学習がうまく行われず困っております
|
1
|
+
学習がうまく行われず困っております.
|
2
|
+
|
3
|
+
活性化関数にReLU関数を用いた,
|
4
|
+
|
5
|
+
2層フィードフォーワード型ニューラルネットワークです.
|
6
|
+
|
7
|
+
中間層のニューロン数はとりあえず100としています.
|
8
|
+
|
9
|
+
誤差の推移をプロットしてみると,初期は誤差が低下しているのですが,
|
10
|
+
|
11
|
+
かなり早期に誤差が収束し,パラメータの更新が行われなくなるといった状態です.
|
2
12
|
|
3
13
|
|
4
14
|
|
@@ -154,8 +164,6 @@
|
|
154
164
|
|
155
165
|
|
156
166
|
|
157
|
-
import shutil
|
158
|
-
|
159
167
|
import time
|
160
168
|
|
161
169
|
import numpy as np
|
@@ -378,19 +386,7 @@
|
|
378
386
|
|
379
387
|
#np.savetxt('parameter/b2.csv', nn.b2, delimiter=',', fmt='%.5e')
|
380
388
|
|
381
|
-
|
389
|
+
|
382
|
-
|
383
|
-
# outputフォルダにも保存
|
384
|
-
|
385
|
-
shutil.copy('./parameter/W1.csv', './output_NN2/parameter/W1.csv')
|
386
|
-
|
387
|
-
#shutil.copy('./parameter/b1.csv', './output_NN2/parameter/b1.csv')
|
388
|
-
|
389
|
-
shutil.copy('./parameter/W2.csv', './output_NN2/parameter/W2.csv')
|
390
|
-
|
391
|
-
#shutil.copy('./parameter/b2.csv', './output_NN2/parameter/b2.csv')
|
392
|
-
|
393
|
-
"""
|
394
390
|
|
395
391
|
# 誤差の計算
|
396
392
|
|
@@ -406,21 +402,7 @@
|
|
406
402
|
|
407
403
|
plt.scatter(x_test[:,0], o_last[:,0])
|
408
404
|
|
409
|
-
|
405
|
+
|
410
|
-
|
411
|
-
# ax1 = fig.add_subplot(111, projection='3d')
|
412
|
-
|
413
|
-
# ax1.view_init(elev=40, azim=60)
|
414
|
-
|
415
|
-
# sc = ax1.scatter(x_test[:,0], x_test[:,1], o_last[:], \
|
416
|
-
|
417
|
-
# zdir='z', cmap='bwr', c='r')
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
# sc = ax1.scatter(x_test[:,0], x_test[:,1], t_test[:], \
|
422
|
-
|
423
|
-
# zdir='z', cmap='bwr', c='b')
|
424
406
|
|
425
407
|
plt.show()
|
426
408
|
|
1
詳細な現状説明を追加しました
test
CHANGED
File without changes
|
test
CHANGED
@@ -440,6 +440,8 @@
|
|
440
440
|
|
441
441
|
**3.教師データ**
|
442
442
|
|
443
|
+
### 2D_nonlinear_train.csv
|
444
|
+
|
443
445
|
```csv
|
444
446
|
|
445
447
|
-2.42918,-0.65366
|
@@ -648,6 +650,8 @@
|
|
648
650
|
|
649
651
|
**4.テストデータ**
|
650
652
|
|
653
|
+
### 2D_nonlinear_test.csv
|
654
|
+
|
651
655
|
```csv
|
652
656
|
|
653
657
|
-1.45583,-0.99340
|
@@ -853,3 +857,19 @@
|
|
853
857
|
|
854
858
|
|
855
859
|
```
|
860
|
+
|
861
|
+
** 誤差の収束状況 **
|
862
|
+
|
863
|
+
![イメージ説明](b45f38f42a82ef982d1aa17de9ea9a31.png)
|
864
|
+
|
865
|
+
|
866
|
+
|
867
|
+
** 学習後テストデータとニューラルネットワークの出力 **
|
868
|
+
|
869
|
+
![](240f1e8550323d074de88d6fd4b3a512.png)
|
870
|
+
|
871
|
+
赤:テストデータ
|
872
|
+
|
873
|
+
青:ニューラルネットワークの出力
|
874
|
+
|
875
|
+
になります
|