質問編集履歴
11
アドバイスをもとに変更追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -167,3 +167,77 @@
|
|
167
167
|

|
168
168
|
|
169
169
|

|
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
|
+

|
206
|
+
|
207
|
+

|
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
アドバイスをいただき加筆修正
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
|
+

|
168
|
+
|
169
|
+

|
9
加筆修正
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
文法の修正
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
書式の改善
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
書式の改善
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))
|
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
|
+

|
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
|
-

|
5
文章の修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
df=[]
|
10
10
|
|
11
|
-
|
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
|
-
|
93
|
+
accuracyをグラフ化
|
94
94
|
|
95
95
|
val_acc,=plt.plot(history.history["val_acc"],c="yellowgreen")
|
96
96
|
|
4
プログラムデータの加筆
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
データの説明を追加
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
test
CHANGED
File without changes
|
test
CHANGED
@@ -10,7 +10,9 @@
|
|
10
10
|
|
11
11
|
(n_samples,n_features)=X.shape
|
12
12
|
|
13
|
-
|
13
|
+
X.shape(40,600)となっております。
|
14
|
+
|
15
|
+
ターゲットデータは
|
14
16
|
|
15
17
|
y=np.array()
|
16
18
|
|
1
文章訂正
test
CHANGED
File without changes
|
test
CHANGED
@@ -22,7 +22,7 @@
|
|
22
22
|
|
23
23
|
model=Sequential()
|
24
24
|
|
25
|
-
中間層の設定はまだ勉強
|
25
|
+
中間層の設定はまだわからないことが多く、勉強できていないため、unitsは色々試してみています。
|
26
26
|
|
27
27
|
model.add(Dense(units=200,activation="relu",input_shape=(n_features,)))
|
28
28
|
|