質問編集履歴
11
アドバイスをもとに変更追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -82,4 +82,41 @@
|
|
82
82
|
コード
|
83
83
|
```
|
84
84
|

|
85
|
-

|
85
|
+

|
86
|
+
|
87
|
+
6/17 Dropoutをの代わりにregurlarizationを導入
|
88
|
+
```python3
|
89
|
+
#neuralnetworkの以下に変更定義を変更 Dropoutを中止し、l2による正則化をを中間層に設定
|
90
|
+
from keras import regularizers
|
91
|
+
model=Sequential()
|
92
|
+
model.add(Dense(units=20,activation="relu",input_shape=(n_features,)))
|
93
|
+
model.add(Dense(10, input_dim=20,
|
94
|
+
kernel_regularizer=regularizers.l2(0.01),
|
95
|
+
activity_regularizer=regularizers.l2(0.01)))
|
96
|
+
model.add(Dense(units=10,activation="relu"))
|
97
|
+
model.add(Dense(units=n_classes,activation="softmax"))
|
98
|
+
model.compile(loss="categorical_crossentropy",optimizer="adam",metrics=["accuracy"])
|
99
|
+
history=model.fit(X,y_keras,epochs=6000,validation_split=0.5,batch_size=20,verbose=2)
|
100
|
+
|
101
|
+
コード
|
102
|
+
```
|
103
|
+

|
104
|
+

|
105
|
+
|
106
|
+
いただいたアドバイスをもとに中間層の設定にDropoutをなくし、l2によるregularlizationを導入した結果を追記しました。regularizationとactivity_regularizerの引数については調べているものの数値の理解がまだ曖昧ですので適切かどうか不明瞭です。正しいかどうかはわかりませんがloss,val_loss共に低下し、accracyについても変動はみられています。ありがとうございます。
|
107
|
+
|
108
|
+
```python3
|
109
|
+
#l2_lossを定義
|
110
|
+
def l2_loss(w):
|
111
|
+
return 0.5 * np.sum(w ** 2)
|
112
|
+
|
113
|
+
w1 = np.array([1.0, 2.0, 3.0])
|
114
|
+
w2 = np.array([4.0, 5.0, 6.0])
|
115
|
+
#aを欠損値とする
|
116
|
+
a=3.0
|
117
|
+
loss = a + l2_loss(w1) + l2_loss(w2)
|
118
|
+
を設定しまして,中間層の正則化に自己で導入したパラメータを導入
|
119
|
+
kernel_regularizer=l2_loss
|
120
|
+
コード
|
121
|
+
```
|
122
|
+
で中間層を変更するとエラーがでてきてしまうため、解決致しましたら追記いたします。
|
10
アドバイスをいただき加筆修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -63,4 +63,23 @@
|
|
63
63
|
損失係数のグラフを作成したのですが、lossは低下しているのですが、val_lossが一度も変動していないような直線を描くグラフになってしまっています。
|
64
64
|
accuracyにおいてもaccは0.7前後まで上昇するときもあるのですが,val_accは0の部分で直線を描いてしまっています。
|
65
65
|
これはプログラムの記載ミスから起こっているのか、サンプル数が少ないために起こる問題なのか、それとも中間層の設定の問題なのか、アドバイスをいただけますと幸いです。
|
66
|
-
svmなども色々試したのですが、ランダムフォレストにおける分類を行うとpredictは100%近くでるテストデータを用いています。
|
66
|
+
svmなども色々試したのですが、ランダムフォレストにおける分類を行うとpredictは100%近くでるテストデータを用いています。
|
67
|
+
|
68
|
+
追記
|
69
|
+
アドバイスをいただきまして中間層のunits、batchsize=1などに変更した結果を追記いたします。
|
70
|
+
様々なアドバイスでval_loss,accに振幅がみられるようになってきました。やはりサンプルが少なすぎるのが問題の根本なのかもしれません。
|
71
|
+
```python
|
72
|
+
model=Sequential()
|
73
|
+
#設定値は適当
|
74
|
+
model.add(Dense(units=20,activation="relu",input_shape=(n_features,)))
|
75
|
+
model.add(Dropout(0.1))
|
76
|
+
model.add(Dense(units=10,activation="relu"))
|
77
|
+
model.add(Dropout(0.1))
|
78
|
+
model.add(Dense(units=n_classes,activation="softmax"))
|
79
|
+
model.compile(loss="categorical_crossentropy",optimizer="adam",metrics=["accuracy"])
|
80
|
+
#学習を行う
|
81
|
+
history=model.fit(X,y_keras,epochs=4000,validation_split=0.5,batch_size=1,verbose=2)
|
82
|
+
コード
|
83
|
+
```
|
84
|
+

|
85
|
+

|
9
加筆修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -41,6 +41,8 @@
|
|
41
41
|
model.add(Dropout(0.1))
|
42
42
|
model.add(Dense(units=n_classes,activation="softmax"))
|
43
43
|
model.compile(loss="categorical_crossentropy",optimizer="adam",metrics=["accuracy"])
|
44
|
+
|
45
|
+
history=model.fit(X,y_keras,epochs=4000,validation_split=0.1,batch_size=n_samples,verbose=2)
|
44
46
|
result=model.predict_classes(X,verbose=0)
|
45
47
|
|
46
48
|
|
8
文法の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
加速度・ジャイロを回転行列で計算し、xyzの3次元で出力したデータを、ravel()で時間軸なしで1次元にしたデータで分類器を作成したく、機械学習を行なっています。
|
2
2
|
特徴量Xとしてkerasで機械学習を行いました。xyzデータを累積和としてdfデータに入れています。
|
3
3
|
```python
|
4
|
+
|
5
|
+
import keras
|
6
|
+
from keras.models import Sequential
|
7
|
+
from keras.layers import Dense,Activation,Dropout
|
8
|
+
from sklearn import datasets
|
9
|
+
import numpy as np
|
10
|
+
import matplotlib.pyplot as plt
|
11
|
+
|
4
12
|
df=[]
|
5
13
|
#測定データをnpyデータで呼び出し、dfに格納
|
6
14
|
for i in range(40):
|
7
書式の改善
title
CHANGED
File without changes
|
body
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
特徴量Xとしてkerasで機械学習を行いました。xyzデータを累積和としてdfデータに入れています。
|
3
3
|
```python
|
4
4
|
df=[]
|
5
|
+
#測定データをnpyデータで呼び出し、dfに格納
|
5
6
|
for i in range(40):
|
6
7
|
acgydata=np.load(f"acgydata{i}.npy")
|
7
8
|
onedata=[]
|
@@ -19,6 +20,7 @@
|
|
19
20
|
onedata.append(z)
|
20
21
|
onedata=np.ravel(onedata)
|
21
22
|
df.append(onedata)
|
23
|
+
#特徴量とターゲットデータを設定
|
22
24
|
X=np.array(df)
|
23
25
|
(n_samples,n_features)=X.shape
|
24
26
|
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])
|
6
書式の改善
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,9 +1,7 @@
|
|
1
|
-
kerasによる機械学習を勉強しています。
|
2
|
-
|
3
1
|
加速度・ジャイロを回転行列で計算し、xyzの3次元で出力したデータを、ravel()で時間軸なしで1次元にしたデータで分類器を作成したく、機械学習を行なっています。
|
4
|
-
特徴量Xとしてkerasで機械学習を行いました。
|
2
|
+
特徴量Xとしてkerasで機械学習を行いました。xyzデータを累積和としてdfデータに入れています。
|
3
|
+
```python
|
5
4
|
df=[]
|
6
|
-
各々のデータをx,y,z軸ごとにcumsumで累積和を取っています。
|
7
5
|
for i in range(40):
|
8
6
|
acgydata=np.load(f"acgydata{i}.npy")
|
9
7
|
onedata=[]
|
@@ -23,13 +21,10 @@
|
|
23
21
|
df.append(onedata)
|
24
22
|
X=np.array(df)
|
25
23
|
(n_samples,n_features)=X.shape
|
26
|
-
この時点でX.shapeは(40,600)のデータ形式になっています。
|
27
|
-
ターゲットデータは
|
28
24
|
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])
|
29
|
-
n_classes=len(np.unique(y))
|
25
|
+
n_classes=len(np.unique(y))
|
30
26
|
y_keras=keras.utils.to_categorical(y,n_classes)
|
31
27
|
model=Sequential()
|
32
|
-
中間層の設定はまだわからないことが多く、勉強できていないため、unitsは色々試してみています。
|
33
28
|
model.add(Dense(units=200,activation="relu",input_shape=(n_features,)))
|
34
29
|
model.add(Dropout(0.1))
|
35
30
|
model.add(Dense(units=100,activation="relu"))
|
@@ -37,22 +32,23 @@
|
|
37
32
|
model.add(Dense(units=n_classes,activation="softmax"))
|
38
33
|
model.compile(loss="categorical_crossentropy",optimizer="adam",metrics=["accuracy"])
|
39
34
|
result=model.predict_classes(X,verbose=0)
|
40
|
-
predictの正答率は40-70%前後で変動が激しい。
|
41
35
|
|
36
|
+
|
42
|
-
以下で損失関数のグラフを描画
|
37
|
+
#以下で損失関数のグラフを描画
|
43
38
|
val_loss,=plt.plot(history.history["val_loss"],c="orange")
|
44
39
|
loss,=plt.plot(history.history["loss"],c="blue")
|
45
40
|
plt.legend([loss,val_loss],["loss","val_loss"])
|
46
41
|
plt.show()
|
47
|
-
accuracyをグラフ化
|
42
|
+
#accuracyをグラフ化
|
48
43
|
val_acc,=plt.plot(history.history["val_acc"],c="yellowgreen")
|
49
44
|
acc,=plt.plot(history.history["acc"],c="red")
|
50
45
|
plt.legend([loss,val_acc],["acc","val_acc"])
|
51
46
|
plt.show()
|
52
47
|
|
48
|
+
```
|
49
|
+
|
50
|
+

|
53
51
|
損失係数のグラフを作成したのですが、lossは低下しているのですが、val_lossが一度も変動していないような直線を描くグラフになってしまっています。
|
54
52
|
accuracyにおいてもaccは0.7前後まで上昇するときもあるのですが,val_accは0の部分で直線を描いてしまっています。
|
55
53
|
これはプログラムの記載ミスから起こっているのか、サンプル数が少ないために起こる問題なのか、それとも中間層の設定の問題なのか、アドバイスをいただけますと幸いです。
|
56
|
-
svmなども色々試したのですが、ランダムフォレストにおける分類を行うとpredictは100%近くでるテストデータを用いています。
|
54
|
+
svmなども色々試したのですが、ランダムフォレストにおける分類を行うとpredictは100%近くでるテストデータを用いています。
|
57
|
-
|
58
|
-

|
5
文章の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
加速度・ジャイロを回転行列で計算し、xyzの3次元で出力したデータを、ravel()で時間軸なしで1次元にしたデータで分類器を作成したく、機械学習を行なっています。
|
4
4
|
特徴量Xとしてkerasで機械学習を行いました。
|
5
5
|
df=[]
|
6
|
-
|
6
|
+
各々のデータをx,y,z軸ごとにcumsumで累積和を取っています。
|
7
7
|
for i in range(40):
|
8
8
|
acgydata=np.load(f"acgydata{i}.npy")
|
9
9
|
onedata=[]
|
@@ -23,7 +23,7 @@
|
|
23
23
|
df.append(onedata)
|
24
24
|
X=np.array(df)
|
25
25
|
(n_samples,n_features)=X.shape
|
26
|
-
X.shape(40,600)
|
26
|
+
この時点でX.shapeは(40,600)のデータ形式になっています。
|
27
27
|
ターゲットデータは
|
28
28
|
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])
|
29
29
|
n_classes=len(np.unique(y))を作成し、動作データを4分類に分ける機械学習をkerasでテストしております。
|
@@ -39,12 +39,12 @@
|
|
39
39
|
result=model.predict_classes(X,verbose=0)
|
40
40
|
predictの正答率は40-70%前後で変動が激しい。
|
41
41
|
|
42
|
-
|
42
|
+
以下で損失関数のグラフを描画
|
43
43
|
val_loss,=plt.plot(history.history["val_loss"],c="orange")
|
44
44
|
loss,=plt.plot(history.history["loss"],c="blue")
|
45
45
|
plt.legend([loss,val_loss],["loss","val_loss"])
|
46
46
|
plt.show()
|
47
|
-
|
47
|
+
accuracyをグラフ化
|
48
48
|
val_acc,=plt.plot(history.history["val_acc"],c="yellowgreen")
|
49
49
|
acc,=plt.plot(history.history["acc"],c="red")
|
50
50
|
plt.legend([loss,val_acc],["acc","val_acc"])
|
4
プログラムデータの加筆
title
CHANGED
File without changes
|
body
CHANGED
@@ -2,13 +2,31 @@
|
|
2
2
|
|
3
3
|
加速度・ジャイロを回転行列で計算し、xyzの3次元で出力したデータを、ravel()で時間軸なしで1次元にしたデータで分類器を作成したく、機械学習を行なっています。
|
4
4
|
特徴量Xとしてkerasで機械学習を行いました。
|
5
|
+
df=[]
|
6
|
+
#各々のデータをx,y,z軸ごとにcumsumで累積和を取っています。
|
7
|
+
for i in range(40):
|
8
|
+
acgydata=np.load(f"acgydata{i}.npy")
|
9
|
+
onedata=[]
|
10
|
+
x=[d[0] for d in acgydata]
|
11
|
+
x=np.array(x).ravel()
|
12
|
+
x=np.cumsum(x)
|
13
|
+
y=[d[1] for d in acgydata]
|
14
|
+
y=np.array(y).ravel()
|
15
|
+
y=np.cumsum(y)
|
16
|
+
z=[d[2] for d in acgydata]
|
17
|
+
z=np.array(z).ravel()
|
18
|
+
z=np.cumsum(z)
|
19
|
+
onedata.append(x)
|
20
|
+
onedata.append(y)
|
21
|
+
onedata.append(z)
|
22
|
+
onedata=np.ravel(onedata)
|
23
|
+
df.append(onedata)
|
5
24
|
X=np.array(df)
|
6
25
|
(n_samples,n_features)=X.shape
|
7
|
-
X.shape(40,600)
|
26
|
+
X.shape(40,600)
|
8
27
|
ターゲットデータは
|
9
|
-
y=np.array()
|
28
|
+
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])
|
10
29
|
n_classes=len(np.unique(y))を作成し、動作データを4分類に分ける機械学習をkerasでテストしております。
|
11
|
-
|
12
30
|
y_keras=keras.utils.to_categorical(y,n_classes)
|
13
31
|
model=Sequential()
|
14
32
|
中間層の設定はまだわからないことが多く、勉強できていないため、unitsは色々試してみています。
|
@@ -20,6 +38,18 @@
|
|
20
38
|
model.compile(loss="categorical_crossentropy",optimizer="adam",metrics=["accuracy"])
|
21
39
|
result=model.predict_classes(X,verbose=0)
|
22
40
|
predictの正答率は40-70%前後で変動が激しい。
|
41
|
+
|
42
|
+
#以下で損失関数のグラフを描画
|
43
|
+
val_loss,=plt.plot(history.history["val_loss"],c="orange")
|
44
|
+
loss,=plt.plot(history.history["loss"],c="blue")
|
45
|
+
plt.legend([loss,val_loss],["loss","val_loss"])
|
46
|
+
plt.show()
|
47
|
+
#accuracyをグラフ化
|
48
|
+
val_acc,=plt.plot(history.history["val_acc"],c="yellowgreen")
|
49
|
+
acc,=plt.plot(history.history["acc"],c="red")
|
50
|
+
plt.legend([loss,val_acc],["acc","val_acc"])
|
51
|
+
plt.show()
|
52
|
+
|
23
53
|
損失係数のグラフを作成したのですが、lossは低下しているのですが、val_lossが一度も変動していないような直線を描くグラフになってしまっています。
|
24
54
|
accuracyにおいてもaccは0.7前後まで上昇するときもあるのですが,val_accは0の部分で直線を描いてしまっています。
|
25
55
|
これはプログラムの記載ミスから起こっているのか、サンプル数が少ないために起こる問題なのか、それとも中間層の設定の問題なのか、アドバイスをいただけますと幸いです。
|
3
データの説明を追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -22,7 +22,7 @@
|
|
22
22
|
predictの正答率は40-70%前後で変動が激しい。
|
23
23
|
損失係数のグラフを作成したのですが、lossは低下しているのですが、val_lossが一度も変動していないような直線を描くグラフになってしまっています。
|
24
24
|
accuracyにおいてもaccは0.7前後まで上昇するときもあるのですが,val_accは0の部分で直線を描いてしまっています。
|
25
|
-
これはサンプル数が少ないために起こる問題なのか、中間層の設定の問題なのかアドバイスをいただけますと幸いです。
|
25
|
+
これはプログラムの記載ミスから起こっているのか、サンプル数が少ないために起こる問題なのか、それとも中間層の設定の問題なのか、アドバイスをいただけますと幸いです。
|
26
|
+
svmなども色々試したのですが、ランダムフォレストにおける分類を行うとpredictは100%近くでるテストデータを用いています。
|
26
27
|
|
27
|
-
|
28
28
|

|
2
title
CHANGED
File without changes
|
body
CHANGED
@@ -4,7 +4,8 @@
|
|
4
4
|
特徴量Xとしてkerasで機械学習を行いました。
|
5
5
|
X=np.array(df)
|
6
6
|
(n_samples,n_features)=X.shape
|
7
|
-
|
7
|
+
X.shape(40,600)となっております。
|
8
|
+
ターゲットデータは
|
8
9
|
y=np.array()
|
9
10
|
n_classes=len(np.unique(y))を作成し、動作データを4分類に分ける機械学習をkerasでテストしております。
|
10
11
|
|
1
文章訂正
title
CHANGED
File without changes
|
body
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
|
11
11
|
y_keras=keras.utils.to_categorical(y,n_classes)
|
12
12
|
model=Sequential()
|
13
|
-
中間層の設定はまだ勉強
|
13
|
+
中間層の設定はまだわからないことが多く、勉強できていないため、unitsは色々試してみています。
|
14
14
|
model.add(Dense(units=200,activation="relu",input_shape=(n_features,)))
|
15
15
|
model.add(Dropout(0.1))
|
16
16
|
model.add(Dense(units=100,activation="relu"))
|