質問編集履歴

11

アドバイスをもとに変更追記

2018/06/17 10:54

投稿

yohehe
yohehe

スコア48

test CHANGED
File without changes
test CHANGED
@@ -167,3 +167,77 @@
167
167
  ![イメージ説明](821c17185c281378d5279ef9868c3688.png)
168
168
 
169
169
  ![イメージ説明](6d9c0df4395d3b37d2ff6fd5eaf8cec7.png)
170
+
171
+
172
+
173
+ 6/17 Dropoutをの代わりにregurlarizationを導入
174
+
175
+ ```python3
176
+
177
+ #neuralnetworkの以下に変更定義を変更 Dropoutを中止し、l2による正則化をを中間層に設定
178
+
179
+ from keras import regularizers
180
+
181
+ model=Sequential()
182
+
183
+ model.add(Dense(units=20,activation="relu",input_shape=(n_features,)))
184
+
185
+ model.add(Dense(10, input_dim=20,
186
+
187
+ kernel_regularizer=regularizers.l2(0.01),
188
+
189
+ activity_regularizer=regularizers.l2(0.01)))
190
+
191
+ model.add(Dense(units=10,activation="relu"))
192
+
193
+ model.add(Dense(units=n_classes,activation="softmax"))
194
+
195
+ model.compile(loss="categorical_crossentropy",optimizer="adam",metrics=["accuracy"])
196
+
197
+ history=model.fit(X,y_keras,epochs=6000,validation_split=0.5,batch_size=20,verbose=2)
198
+
199
+
200
+
201
+ コード
202
+
203
+ ```
204
+
205
+ ![イメージ説明](011a223bc55d205de441d53feb0827fd.png)
206
+
207
+ ![イメージ説明](dc904c14fa75db819f8781c0396d5e82.png)
208
+
209
+
210
+
211
+ いただいたアドバイスをもとに中間層の設定にDropoutをなくし、l2によるregularlizationを導入した結果を追記しました。regularizationとactivity_regularizerの引数については調べているものの数値の理解がまだ曖昧ですので適切かどうか不明瞭です。正しいかどうかはわかりませんがloss,val_loss共に低下し、accracyについても変動はみられています。ありがとうございます。
212
+
213
+
214
+
215
+ ```python3
216
+
217
+ #l2_lossを定義
218
+
219
+ def l2_loss(w):
220
+
221
+ return 0.5 * np.sum(w ** 2)
222
+
223
+
224
+
225
+ w1 = np.array([1.0, 2.0, 3.0])
226
+
227
+ w2 = np.array([4.0, 5.0, 6.0])
228
+
229
+ #aを欠損値とする
230
+
231
+ a=3.0
232
+
233
+ loss = a + l2_loss(w1) + l2_loss(w2)
234
+
235
+ を設定しまして,中間層の正則化に自己で導入したパラメータを導入
236
+
237
+ kernel_regularizer=l2_loss
238
+
239
+ コード
240
+
241
+ ```
242
+
243
+ で中間層を変更するとエラーがでてきてしまうため、解決致しましたら追記いたします。

10

アドバイスをいただき加筆修正

2018/06/17 10:54

投稿

yohehe
yohehe

スコア48

test CHANGED
File without changes
test CHANGED
@@ -129,3 +129,41 @@
129
129
  これはプログラムの記載ミスから起こっているのか、サンプル数が少ないために起こる問題なのか、それとも中間層の設定の問題なのか、アドバイスをいただけますと幸いです。
130
130
 
131
131
  svmなども色々試したのですが、ランダムフォレストにおける分類を行うとpredictは100%近くでるテストデータを用いています。
132
+
133
+
134
+
135
+ 追記
136
+
137
+ アドバイスをいただきまして中間層のunits、batchsize=1などに変更した結果を追記いたします。
138
+
139
+ 様々なアドバイスでval_loss,accに振幅がみられるようになってきました。やはりサンプルが少なすぎるのが問題の根本なのかもしれません。
140
+
141
+ ```python
142
+
143
+ model=Sequential()
144
+
145
+ #設定値は適当
146
+
147
+ model.add(Dense(units=20,activation="relu",input_shape=(n_features,)))
148
+
149
+ model.add(Dropout(0.1))
150
+
151
+ model.add(Dense(units=10,activation="relu"))
152
+
153
+ model.add(Dropout(0.1))
154
+
155
+ model.add(Dense(units=n_classes,activation="softmax"))
156
+
157
+ model.compile(loss="categorical_crossentropy",optimizer="adam",metrics=["accuracy"])
158
+
159
+ #学習を行う
160
+
161
+ history=model.fit(X,y_keras,epochs=4000,validation_split=0.5,batch_size=1,verbose=2)
162
+
163
+ コード
164
+
165
+ ```
166
+
167
+ ![イメージ説明](821c17185c281378d5279ef9868c3688.png)
168
+
169
+ ![イメージ説明](6d9c0df4395d3b37d2ff6fd5eaf8cec7.png)

9

加筆修正

2018/06/15 16:58

投稿

yohehe
yohehe

スコア48

test CHANGED
File without changes
test CHANGED
@@ -84,6 +84,10 @@
84
84
 
85
85
  model.compile(loss="categorical_crossentropy",optimizer="adam",metrics=["accuracy"])
86
86
 
87
+
88
+
89
+ history=model.fit(X,y_keras,epochs=4000,validation_split=0.1,batch_size=n_samples,verbose=2)
90
+
87
91
  result=model.predict_classes(X,verbose=0)
88
92
 
89
93
 

8

文法の修正

2018/06/15 15:03

投稿

yohehe
yohehe

スコア48

test CHANGED
File without changes
test CHANGED
@@ -3,6 +3,22 @@
3
3
  特徴量Xとしてkerasで機械学習を行いました。xyzデータを累積和としてdfデータに入れています。
4
4
 
5
5
  ```python
6
+
7
+
8
+
9
+ import keras
10
+
11
+ from keras.models import Sequential
12
+
13
+ from keras.layers import Dense,Activation,Dropout
14
+
15
+ from sklearn import datasets
16
+
17
+ import numpy as np
18
+
19
+ import matplotlib.pyplot as plt
20
+
21
+
6
22
 
7
23
  df=[]
8
24
 

7

書式の改善

2018/06/15 14:44

投稿

yohehe
yohehe

スコア48

test CHANGED
File without changes
test CHANGED
@@ -5,6 +5,8 @@
5
5
  ```python
6
6
 
7
7
  df=[]
8
+
9
+ #測定データをnpyデータで呼び出し、dfに格納
8
10
 
9
11
  for i in range(40):
10
12
 
@@ -39,6 +41,8 @@
39
41
  onedata=np.ravel(onedata)
40
42
 
41
43
  df.append(onedata)
44
+
45
+ #特徴量とターゲットデータを設定
42
46
 
43
47
  X=np.array(df)
44
48
 

6

書式の改善

2018/06/15 14:40

投稿

yohehe
yohehe

スコア48

test CHANGED
File without changes
test CHANGED
@@ -1,14 +1,10 @@
1
- kerasによる機械学習を勉強しています。
2
-
3
-
4
-
5
1
  加速度・ジャイロを回転行列で計算し、xyzの3次元で出力したデータを、ravel()で時間軸なしで1次元にしたデータで分類器を作成したく、機械学習を行なっています。
6
2
 
7
- 特徴量Xとしてkerasで機械学習を行いました。
3
+ 特徴量Xとしてkerasで機械学習を行いました。xyzデータを累積和としてdfデータに入れています。
4
+
5
+ ```python
8
6
 
9
7
  df=[]
10
-
11
- 各々のデータをx,y,z軸ごとにcumsumで累積和を取っています。
12
8
 
13
9
  for i in range(40):
14
10
 
@@ -48,19 +44,13 @@
48
44
 
49
45
  (n_samples,n_features)=X.shape
50
46
 
51
- この時点でX.shapeは(40,600)のデータ形式になっています。
52
-
53
- ターゲットデータは
54
-
55
47
  y=np.array([0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3])
56
48
 
57
- n_classes=len(np.unique(y))を作成し、動作データを4分類に分ける機械学習をkerasでテストしております。
49
+ n_classes=len(np.unique(y))
58
50
 
59
51
  y_keras=keras.utils.to_categorical(y,n_classes)
60
52
 
61
53
  model=Sequential()
62
-
63
- 中間層の設定はまだわからないことが多く、勉強できていないため、unitsは色々試してみています。
64
54
 
65
55
  model.add(Dense(units=200,activation="relu",input_shape=(n_features,)))
66
56
 
@@ -76,11 +66,11 @@
76
66
 
77
67
  result=model.predict_classes(X,verbose=0)
78
68
 
79
- predictの正答率は40-70%前後で変動が激しい。
80
69
 
81
70
 
82
71
 
72
+
83
- 以下で損失関数のグラフを描画
73
+ #以下で損失関数のグラフを描画
84
74
 
85
75
  val_loss,=plt.plot(history.history["val_loss"],c="orange")
86
76
 
@@ -90,7 +80,7 @@
90
80
 
91
81
  plt.show()
92
82
 
93
- accuracyをグラフ化
83
+ #accuracyをグラフ化
94
84
 
95
85
  val_acc,=plt.plot(history.history["val_acc"],c="yellowgreen")
96
86
 
@@ -102,6 +92,12 @@
102
92
 
103
93
 
104
94
 
95
+ ```
96
+
97
+
98
+
99
+ ![イメージ説明](3b1fa7331afc4a62e17841366632ab7f.png)![イメージ説明](d960233f331aaa99b9eac953b2396a38.png)
100
+
105
101
  損失係数のグラフを作成したのですが、lossは低下しているのですが、val_lossが一度も変動していないような直線を描くグラフになってしまっています。
106
102
 
107
103
  accuracyにおいてもaccは0.7前後まで上昇するときもあるのですが,val_accは0の部分で直線を描いてしまっています。
@@ -109,7 +105,3 @@
109
105
  これはプログラムの記載ミスから起こっているのか、サンプル数が少ないために起こる問題なのか、それとも中間層の設定の問題なのか、アドバイスをいただけますと幸いです。
110
106
 
111
107
  svmなども色々試したのですが、ランダムフォレストにおける分類を行うとpredictは100%近くでるテストデータを用いています。
112
-
113
-
114
-
115
- ![イメージ説明](3b1fa7331afc4a62e17841366632ab7f.png)![イメージ説明](d960233f331aaa99b9eac953b2396a38.png)

5

文章の修正

2018/06/15 14:36

投稿

yohehe
yohehe

スコア48

test CHANGED
File without changes
test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  df=[]
10
10
 
11
- #各々のデータをx,y,z軸ごとにcumsumで累積和を取っています。
11
+ 各々のデータをx,y,z軸ごとにcumsumで累積和を取っています。
12
12
 
13
13
  for i in range(40):
14
14
 
@@ -48,7 +48,7 @@
48
48
 
49
49
  (n_samples,n_features)=X.shape
50
50
 
51
- X.shape(40,600)
51
+ この時点でX.shape(40,600)のデータ形式になっています。
52
52
 
53
53
  ターゲットデータは
54
54
 
@@ -80,7 +80,7 @@
80
80
 
81
81
 
82
82
 
83
- #以下で損失関数のグラフを描画
83
+ 以下で損失関数のグラフを描画
84
84
 
85
85
  val_loss,=plt.plot(history.history["val_loss"],c="orange")
86
86
 
@@ -90,7 +90,7 @@
90
90
 
91
91
  plt.show()
92
92
 
93
- #accuracyをグラフ化
93
+ accuracyをグラフ化
94
94
 
95
95
  val_acc,=plt.plot(history.history["val_acc"],c="yellowgreen")
96
96
 

4

プログラムデータの加筆

2018/06/15 14:29

投稿

yohehe
yohehe

スコア48

test CHANGED
File without changes
test CHANGED
@@ -6,19 +6,55 @@
6
6
 
7
7
  特徴量Xとしてkerasで機械学習を行いました。
8
8
 
9
+ df=[]
10
+
11
+ #各々のデータをx,y,z軸ごとにcumsumで累積和を取っています。
12
+
13
+ for i in range(40):
14
+
15
+ acgydata=np.load(f"acgydata{i}.npy")
16
+
17
+ onedata=[]
18
+
19
+ x=[d[0] for d in acgydata]
20
+
21
+ x=np.array(x).ravel()
22
+
23
+ x=np.cumsum(x)
24
+
25
+ y=[d[1] for d in acgydata]
26
+
27
+ y=np.array(y).ravel()
28
+
29
+ y=np.cumsum(y)
30
+
31
+ z=[d[2] for d in acgydata]
32
+
33
+ z=np.array(z).ravel()
34
+
35
+ z=np.cumsum(z)
36
+
37
+ onedata.append(x)
38
+
39
+ onedata.append(y)
40
+
41
+ onedata.append(z)
42
+
43
+ onedata=np.ravel(onedata)
44
+
45
+ df.append(onedata)
46
+
9
47
  X=np.array(df)
10
48
 
11
49
  (n_samples,n_features)=X.shape
12
50
 
13
- X.shape(40,600)となっております。
51
+ X.shape(40,600)
14
52
 
15
53
  ターゲットデータは
16
54
 
17
- y=np.array()
55
+ y=np.array([0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3])
18
56
 
19
57
  n_classes=len(np.unique(y))を作成し、動作データを4分類に分ける機械学習をkerasでテストしております。
20
-
21
-
22
58
 
23
59
  y_keras=keras.utils.to_categorical(y,n_classes)
24
60
 
@@ -42,6 +78,30 @@
42
78
 
43
79
  predictの正答率は40-70%前後で変動が激しい。
44
80
 
81
+
82
+
83
+ #以下で損失関数のグラフを描画
84
+
85
+ val_loss,=plt.plot(history.history["val_loss"],c="orange")
86
+
87
+ loss,=plt.plot(history.history["loss"],c="blue")
88
+
89
+ plt.legend([loss,val_loss],["loss","val_loss"])
90
+
91
+ plt.show()
92
+
93
+ #accuracyをグラフ化
94
+
95
+ val_acc,=plt.plot(history.history["val_acc"],c="yellowgreen")
96
+
97
+ acc,=plt.plot(history.history["acc"],c="red")
98
+
99
+ plt.legend([loss,val_acc],["acc","val_acc"])
100
+
101
+ plt.show()
102
+
103
+
104
+
45
105
  損失係数のグラフを作成したのですが、lossは低下しているのですが、val_lossが一度も変動していないような直線を描くグラフになってしまっています。
46
106
 
47
107
  accuracyにおいてもaccは0.7前後まで上昇するときもあるのですが,val_accは0の部分で直線を描いてしまっています。

3

データの説明を追加

2018/06/15 14:26

投稿

yohehe
yohehe

スコア48

test CHANGED
File without changes
test CHANGED
@@ -46,9 +46,9 @@
46
46
 
47
47
  accuracyにおいてもaccは0.7前後まで上昇するときもあるのですが,val_accは0の部分で直線を描いてしまっています。
48
48
 
49
- これはサンプル数が少ないために起こる問題なのか、中間層の設定の問題なのかアドバイスをいただけますと幸いです。
49
+ これはプログラムの記載ミスから起こっているのか、サンプル数が少ないために起こる問題なのか、それとも中間層の設定の問題なのかアドバイスをいただけますと幸いです。
50
50
 
51
-
51
+ svmなども色々試したのですが、ランダムフォレストにおける分類を行うとpredictは100%近くでるテストデータを用いています。
52
52
 
53
53
 
54
54
 

2

2018/06/15 14:12

投稿

yohehe
yohehe

スコア48

test CHANGED
File without changes
test CHANGED
@@ -10,7 +10,9 @@
10
10
 
11
11
  (n_samples,n_features)=X.shape
12
12
 
13
- 特徴量600,サンプル数40で設定
13
+ X.shape(40,600)となっております
14
+
15
+ ターゲットデータは
14
16
 
15
17
  y=np.array()
16
18
 

1

文章訂正

2018/06/15 13:48

投稿

yohehe
yohehe

スコア48

test CHANGED
File without changes
test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  model=Sequential()
24
24
 
25
- 中間層の設定はまだ勉強ていないため、unitsは色々試してみています。
25
+ 中間層の設定はまだわからないことが多く、勉強できていないため、unitsは色々試してみています。
26
26
 
27
27
  model.add(Dense(units=200,activation="relu",input_shape=(n_features,)))
28
28