teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

11

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

2018/06/17 10:54

投稿

yohehe
yohehe

スコア48

title CHANGED
File without changes
body CHANGED
@@ -82,4 +82,41 @@
82
82
  コード
83
83
  ```
84
84
  ![イメージ説明](821c17185c281378d5279ef9868c3688.png)
85
- ![イメージ説明](6d9c0df4395d3b37d2ff6fd5eaf8cec7.png)
85
+ ![イメージ説明](6d9c0df4395d3b37d2ff6fd5eaf8cec7.png)
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
+ ![イメージ説明](011a223bc55d205de441d53feb0827fd.png)
104
+ ![イメージ説明](dc904c14fa75db819f8781c0396d5e82.png)
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

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

2018/06/17 10:54

投稿

yohehe
yohehe

スコア48

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
+ ![イメージ説明](821c17185c281378d5279ef9868c3688.png)
85
+ ![イメージ説明](6d9c0df4395d3b37d2ff6fd5eaf8cec7.png)

9

加筆修正

2018/06/15 16:58

投稿

yohehe
yohehe

スコア48

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

文法の修正

2018/06/15 15:03

投稿

yohehe
yohehe

スコア48

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

書式の改善

2018/06/15 14:44

投稿

yohehe
yohehe

スコア48

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

書式の改善

2018/06/15 14:40

投稿

yohehe
yohehe

スコア48

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))を作成し、動作データを4分類に分ける機械学習をkerasでテストしております。
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
+ ![イメージ説明](3b1fa7331afc4a62e17841366632ab7f.png)![イメージ説明](d960233f331aaa99b9eac953b2396a38.png)
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
- ![イメージ説明](3b1fa7331afc4a62e17841366632ab7f.png)![イメージ説明](d960233f331aaa99b9eac953b2396a38.png)

5

文章の修正

2018/06/15 14:36

投稿

yohehe
yohehe

スコア48

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
- #各々のデータをx,y,z軸ごとにcumsumで累積和を取っています。
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
- #accuracyをグラフ化
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

プログラムデータの加筆

2018/06/15 14:29

投稿

yohehe
yohehe

スコア48

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

データの説明を追加

2018/06/15 14:26

投稿

yohehe
yohehe

スコア48

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
  ![イメージ説明](3b1fa7331afc4a62e17841366632ab7f.png)![イメージ説明](d960233f331aaa99b9eac953b2396a38.png)

2

2018/06/15 14:12

投稿

yohehe
yohehe

スコア48

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
- 特徴量600,サンプル数40で設定
7
+ X.shape(40,600)となっております
8
+ ターゲットデータは
8
9
  y=np.array()
9
10
  n_classes=len(np.unique(y))を作成し、動作データを4分類に分ける機械学習をkerasでテストしております。
10
11
 

1

文章訂正

2018/06/15 13:48

投稿

yohehe
yohehe

スコア48

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
- 中間層の設定はまだ勉強ていないため、unitsは色々試してみています。
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"))