質問編集履歴

7

軽微な修正

2020/06/21 06:06

投稿

takamy
takamy

スコア0

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

画像の修正

2020/06/21 06:05

投稿

takamy
takamy

スコア0

test CHANGED
File without changes
test CHANGED
@@ -850,13 +850,13 @@
850
850
 
851
851
  ** 誤差の収束状況 **
852
852
 
853
- ![イメージ説明](75da0563d6495f01b519e064dbe7a7b4.png)
853
+ ![イメージ説明](aaefc2f831ce8f00bc7681fdedde06e2.png)
854
854
 
855
855
 
856
856
 
857
857
  ** 学習後テストデータとニューラルネットワークの出力 **
858
858
 
859
- ![イメージ説明](1454c3c2387b6f22ead44dd5d9e7bc91.png)
859
+ ![イメージ説明](eba87a46a8bf25387a5c065795176b7c.png)
860
860
 
861
861
  赤:テストデータ
862
862
 

5

バイアス項を追加しました.

2020/06/21 06:00

投稿

takamy
takamy

スコア0

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 = 100
267
+ batch_size = 10
260
268
 
261
269
  train_loss_list = []
262
270
 

4

画像の修正

2020/06/21 05:58

投稿

takamy
takamy

スコア0

test CHANGED
File without changes
test CHANGED
@@ -842,13 +842,13 @@
842
842
 
843
843
  ** 誤差の収束状況 **
844
844
 
845
- ![イメージ説明](b45f38f42a82ef982d1aa17de9ea9a31.png)
845
+ ![イメージ説明](75da0563d6495f01b519e064dbe7a7b4.png)
846
846
 
847
847
 
848
848
 
849
849
  ** 学習後テストデータとニューラルネットワークの出力 **
850
850
 
851
- ![](240f1e8550323d074de88d6fd4b3a512.png)
851
+ ![イメージ説明](1454c3c2387b6f22ead44dd5d9e7bc91.png)
852
852
 
853
853
  赤:テストデータ
854
854
 

3

プログラムの修正

2020/06/21 05:20

投稿

takamy
takamy

スコア0

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[:batch_size]#batch_mask]
301
+ i_data[:,0] = x_train[batch_mask]
302
-
302
+
303
- t_data[:,0] = t_train[:batch_size]#batch_mask]
303
+ t_data[:,0] = t_train[batch_mask]
304
304
 
305
305
 
306
306
 

2

現状の説明を追記しました

2020/06/21 05:18

投稿

takamy
takamy

スコア0

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
- # fig = plt.figure()
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

詳細な現状説明を追加しました

2020/06/21 04:58

投稿

takamy
takamy

スコア0

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
+ になります