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

回答編集履歴

3

importが一つ抜けていたので修正しました。

2020/06/02 15:08

投稿

tacanoviano
tacanoviano

スコア46

answer CHANGED
@@ -23,6 +23,7 @@
23
23
  from tensorflow.keras.initializers import he_normal
24
24
  from tensorflow.keras.optimizers import Adam
25
25
 
26
+ import matplotlib.pyplot as plt
26
27
  import numpy as np
27
28
  import math as mt
28
29
 

2

codeの挿入に失敗したので更新しました

2020/06/02 15:08

投稿

tacanoviano
tacanoviano

スコア46

answer CHANGED
@@ -13,6 +13,7 @@
13
13
 
14
14
  ↓は動きました。予測精度が悪い(予測値が0.6以上にならない)理由がよくわかりませんが、
15
15
  学習は進んでいるようです。
16
+ ```python3
16
17
  from tensorflow import keras
17
18
  from tensorflow.keras.models import Sequential
18
19
  from tensorflow.keras.layers import LSTM
@@ -27,6 +28,7 @@
27
28
 
28
29
  image_list=[]
29
30
  temp = []
31
+ #[X.shape, Y.shape] = [(89711, 4, 36), (89711, 4)]
30
32
 
31
33
  for i in range(89711):
32
34
  image=np.zeros(4).reshape(4,1)
@@ -37,18 +39,20 @@
37
39
  image_list.append(image[::,1:37].reshape(4,36))
38
40
  temp.append([mt.sin((36+i)*0.1)/2+0.5, mt.cos((36+i)*0.1)/2+0.5,mt.sin((36+i)*0.1+0.5)/2+0.5,mt.cos((36+i)*0.1+0.5)/2+0.5])
39
41
 
40
- X_train = np.array(image_list)
42
+ X_train = np.array(image_list)#(89711, 4, 36)の入力。4変量はそれぞれサイン関数とか、36点分の連続データ
41
- Y_train = np.array(temp)
43
+ Y_train = np.array(temp)#(89711, 4)のターゲット。
42
44
 
43
45
  print(X_train.shape)
44
46
  print(Y_train.shape)
45
47
 
46
48
  output_dim = 4
47
- num_hidden_units = 128
49
+ num_hidden_units = 128 # 隠れ層のユニット数
48
- batch_size = 300
50
+ batch_size = 300 # ミニバッチサイズ
49
- epochs = 100
51
+ epochs = 100 # 学習エポック数
50
- learning_rate = 0.001
52
+ learning_rate = 0.001 # 学習率
51
53
 
54
+ # モデルの作成
55
+
52
56
  num_hidden_units = 128
53
57
  output_dim = 4
54
58
 
@@ -56,23 +60,24 @@
56
60
  model.add(LSTM(
57
61
  num_hidden_units,
58
62
  input_shape=(X_train.shape[1],X_train.shape[2]),
59
- return_sequences=**False**))
63
+ return_sequences=False))#←変更
60
64
 
61
65
  model.add(Dropout(0.2))
62
- model.add(Dense(output_dim))
66
+ model.add(Dense(output_dim)) # 分類の数
63
67
 
64
68
  model.add(Activation("softmax"))
65
69
 
66
- model.compile(loss="**mean_squared_error**", optimizer="Adam")
70
+ model.compile(loss="mean_squared_error", optimizer="Adam")#←変更
67
71
  model.summary()
68
72
 
73
+
69
74
  model.fit(X_train, Y_train,
70
75
  batch_size=batch_size,
71
76
  epochs=100,
72
77
  validation_split=0.1,
73
78
  )
74
79
 
75
-
80
+ #ここから予測結果確認用
76
81
  lstm_data_y_predict = model.predict(X_train)
77
82
 
78
83
  plt.figure()
@@ -84,4 +89,5 @@
84
89
  plt.plot(Y_train[:, 1], lw=2)
85
90
  plt.plot(lstm_data_y_predict[:, 1], '--', lw=2)
86
91
 
87
- plt.figure()
92
+ plt.figure()
93
+ ```

1

Noneを足したら動く、という回答が間違っていたので訂正します。

2020/06/02 15:01

投稿

tacanoviano
tacanoviano

スコア46

answer CHANGED
@@ -3,4 +3,85 @@
3
3
  的なエラーだと思います。
4
4
 
5
5
  ↓Noneはバッチサイズらしいです(一度に学習させるサンプル数かな)
6
- https://qiita.com/sasayabaku/items/b7872a3b8acc7d6261bf
6
+ https://qiita.com/sasayabaku/items/b7872a3b8acc7d6261bf
7
+
8
+ ごめんなさい、Noneは無くてもよかったです。
9
+ ↓太字の部分を変えました。変更しないと私の力では解決できませんでした。
10
+ なお、LSTMの解説を読むとXとYは同じパラメータで無いとダメな気がします。
11
+ (例:X→36日分の株価 Y→今日の株価)
12
+ 分類したいならConv2Dとかの方が一般的なのかな、と思いましたがどうでしょうか?
13
+
14
+ ↓は動きました。予測精度が悪い(予測値が0.6以上にならない)理由がよくわかりませんが、
15
+ 学習は進んでいるようです。
16
+ from tensorflow import keras
17
+ from tensorflow.keras.models import Sequential
18
+ from tensorflow.keras.layers import LSTM
19
+ from tensorflow.keras.layers import Activation, Dense, Dropout, Flatten
20
+ from tensorflow.keras.layers import Conv2D, MaxPooling2D
21
+ from tensorflow.keras import backend as K
22
+ from tensorflow.keras.initializers import he_normal
23
+ from tensorflow.keras.optimizers import Adam
24
+
25
+ import numpy as np
26
+ import math as mt
27
+
28
+ image_list=[]
29
+ temp = []
30
+
31
+ for i in range(89711):
32
+ image=np.zeros(4).reshape(4,1)
33
+ for j in range(36):
34
+ itemp = np.array([mt.sin((j+i)*0.1)/2+0.5, mt.cos((j+i)*0.1)/2+0.5,mt.sin((j+i)*0.1+0.5)/2+0.5,mt.cos((j+i)*0.1+0.5)/2+0.5])
35
+ image = np.append(image,itemp.reshape(4,1),axis=1)
36
+
37
+ image_list.append(image[::,1:37].reshape(4,36))
38
+ temp.append([mt.sin((36+i)*0.1)/2+0.5, mt.cos((36+i)*0.1)/2+0.5,mt.sin((36+i)*0.1+0.5)/2+0.5,mt.cos((36+i)*0.1+0.5)/2+0.5])
39
+
40
+ X_train = np.array(image_list)
41
+ Y_train = np.array(temp)
42
+
43
+ print(X_train.shape)
44
+ print(Y_train.shape)
45
+
46
+ output_dim = 4
47
+ num_hidden_units = 128
48
+ batch_size = 300
49
+ epochs = 100
50
+ learning_rate = 0.001
51
+
52
+ num_hidden_units = 128
53
+ output_dim = 4
54
+
55
+ model = Sequential()
56
+ model.add(LSTM(
57
+ num_hidden_units,
58
+ input_shape=(X_train.shape[1],X_train.shape[2]),
59
+ return_sequences=**False**))
60
+
61
+ model.add(Dropout(0.2))
62
+ model.add(Dense(output_dim))
63
+
64
+ model.add(Activation("softmax"))
65
+
66
+ model.compile(loss="**mean_squared_error**", optimizer="Adam")
67
+ model.summary()
68
+
69
+ model.fit(X_train, Y_train,
70
+ batch_size=batch_size,
71
+ epochs=100,
72
+ validation_split=0.1,
73
+ )
74
+
75
+
76
+ lstm_data_y_predict = model.predict(X_train)
77
+
78
+ plt.figure()
79
+ plt.title('sin')
80
+ plt.plot(Y_train[:, 0], lw=2)
81
+ plt.plot(lstm_data_y_predict[:, 0], '--', lw=2)
82
+ plt.figure()
83
+ plt.title('cos')
84
+ plt.plot(Y_train[:, 1], lw=2)
85
+ plt.plot(lstm_data_y_predict[:, 1], '--', lw=2)
86
+
87
+ plt.figure()