回答編集履歴

3

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

2020/06/02 15:08

投稿

tacanoviano
tacanoviano

スコア46

test CHANGED
@@ -47,6 +47,8 @@
47
47
  from tensorflow.keras.optimizers import Adam
48
48
 
49
49
 
50
+
51
+ import matplotlib.pyplot as plt
50
52
 
51
53
  import numpy as np
52
54
 

2

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

2020/06/02 15:08

投稿

tacanoviano
tacanoviano

スコア46

test CHANGED
@@ -28,6 +28,8 @@
28
28
 
29
29
  学習は進んでいるようです。
30
30
 
31
+ ```python3
32
+
31
33
  from tensorflow import keras
32
34
 
33
35
  from tensorflow.keras.models import Sequential
@@ -56,6 +58,8 @@
56
58
 
57
59
  temp = []
58
60
 
61
+ #[X.shape, Y.shape] = [(89711, 4, 36), (89711, 4)]
62
+
59
63
 
60
64
 
61
65
  for i in range(89711):
@@ -76,9 +80,9 @@
76
80
 
77
81
 
78
82
 
79
- X_train = np.array(image_list)
83
+ X_train = np.array(image_list)#(89711, 4, 36)の入力。4変量はそれぞれサイン関数とか、36点分の連続データ
80
84
 
81
- Y_train = np.array(temp)
85
+ Y_train = np.array(temp)#(89711, 4)のターゲット。
82
86
 
83
87
 
84
88
 
@@ -90,13 +94,17 @@
90
94
 
91
95
  output_dim = 4
92
96
 
93
- num_hidden_units = 128
97
+ num_hidden_units = 128 # 隠れ層のユニット数
94
98
 
95
- batch_size = 300
99
+ batch_size = 300 # ミニバッチサイズ
96
100
 
97
- epochs = 100
101
+ epochs = 100 # 学習エポック数
98
102
 
99
- learning_rate = 0.001
103
+ learning_rate = 0.001 # 学習率
104
+
105
+
106
+
107
+ # モデルの作成
100
108
 
101
109
 
102
110
 
@@ -114,13 +122,13 @@
114
122
 
115
123
  input_shape=(X_train.shape[1],X_train.shape[2]),
116
124
 
117
- return_sequences=**False**))
125
+ return_sequences=False))#←変更
118
126
 
119
127
 
120
128
 
121
129
  model.add(Dropout(0.2))
122
130
 
123
- model.add(Dense(output_dim))
131
+ model.add(Dense(output_dim)) # 分類の数
124
132
 
125
133
 
126
134
 
@@ -128,9 +136,11 @@
128
136
 
129
137
 
130
138
 
131
- model.compile(loss="**mean_squared_error**", optimizer="Adam")
139
+ model.compile(loss="mean_squared_error", optimizer="Adam")#←変更
132
140
 
133
141
  model.summary()
142
+
143
+
134
144
 
135
145
 
136
146
 
@@ -146,7 +156,7 @@
146
156
 
147
157
 
148
158
 
149
-
159
+ #ここから予測結果確認用
150
160
 
151
161
  lstm_data_y_predict = model.predict(X_train)
152
162
 
@@ -171,3 +181,5 @@
171
181
 
172
182
 
173
183
  plt.figure()
184
+
185
+ ```

1

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

2020/06/02 15:01

投稿

tacanoviano
tacanoviano

スコア46

test CHANGED
@@ -9,3 +9,165 @@
9
9
  ↓Noneはバッチサイズらしいです(一度に学習させるサンプル数かな)
10
10
 
11
11
  https://qiita.com/sasayabaku/items/b7872a3b8acc7d6261bf
12
+
13
+
14
+
15
+ ごめんなさい、Noneは無くてもよかったです。
16
+
17
+ ↓太字の部分を変えました。変更しないと私の力では解決できませんでした。
18
+
19
+ なお、LSTMの解説を読むとXとYは同じパラメータで無いとダメな気がします。
20
+
21
+ (例:X→36日分の株価 Y→今日の株価)
22
+
23
+ 分類したいならConv2Dとかの方が一般的なのかな、と思いましたがどうでしょうか?
24
+
25
+
26
+
27
+ ↓は動きました。予測精度が悪い(予測値が0.6以上にならない)理由がよくわかりませんが、
28
+
29
+ 学習は進んでいるようです。
30
+
31
+ from tensorflow import keras
32
+
33
+ from tensorflow.keras.models import Sequential
34
+
35
+ from tensorflow.keras.layers import LSTM
36
+
37
+ from tensorflow.keras.layers import Activation, Dense, Dropout, Flatten
38
+
39
+ from tensorflow.keras.layers import Conv2D, MaxPooling2D
40
+
41
+ from tensorflow.keras import backend as K
42
+
43
+ from tensorflow.keras.initializers import he_normal
44
+
45
+ from tensorflow.keras.optimizers import Adam
46
+
47
+
48
+
49
+ import numpy as np
50
+
51
+ import math as mt
52
+
53
+
54
+
55
+ image_list=[]
56
+
57
+ temp = []
58
+
59
+
60
+
61
+ for i in range(89711):
62
+
63
+ image=np.zeros(4).reshape(4,1)
64
+
65
+ for j in range(36):
66
+
67
+ 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])
68
+
69
+ image = np.append(image,itemp.reshape(4,1),axis=1)
70
+
71
+
72
+
73
+ image_list.append(image[::,1:37].reshape(4,36))
74
+
75
+ 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])
76
+
77
+
78
+
79
+ X_train = np.array(image_list)
80
+
81
+ Y_train = np.array(temp)
82
+
83
+
84
+
85
+ print(X_train.shape)
86
+
87
+ print(Y_train.shape)
88
+
89
+
90
+
91
+ output_dim = 4
92
+
93
+ num_hidden_units = 128
94
+
95
+ batch_size = 300
96
+
97
+ epochs = 100
98
+
99
+ learning_rate = 0.001
100
+
101
+
102
+
103
+ num_hidden_units = 128
104
+
105
+ output_dim = 4
106
+
107
+
108
+
109
+ model = Sequential()
110
+
111
+ model.add(LSTM(
112
+
113
+ num_hidden_units,
114
+
115
+ input_shape=(X_train.shape[1],X_train.shape[2]),
116
+
117
+ return_sequences=**False**))
118
+
119
+
120
+
121
+ model.add(Dropout(0.2))
122
+
123
+ model.add(Dense(output_dim))
124
+
125
+
126
+
127
+ model.add(Activation("softmax"))
128
+
129
+
130
+
131
+ model.compile(loss="**mean_squared_error**", optimizer="Adam")
132
+
133
+ model.summary()
134
+
135
+
136
+
137
+ model.fit(X_train, Y_train,
138
+
139
+ batch_size=batch_size,
140
+
141
+ epochs=100,
142
+
143
+ validation_split=0.1,
144
+
145
+ )
146
+
147
+
148
+
149
+
150
+
151
+ lstm_data_y_predict = model.predict(X_train)
152
+
153
+
154
+
155
+ plt.figure()
156
+
157
+ plt.title('sin')
158
+
159
+ plt.plot(Y_train[:, 0], lw=2)
160
+
161
+ plt.plot(lstm_data_y_predict[:, 0], '--', lw=2)
162
+
163
+ plt.figure()
164
+
165
+ plt.title('cos')
166
+
167
+ plt.plot(Y_train[:, 1], lw=2)
168
+
169
+ plt.plot(lstm_data_y_predict[:, 1], '--', lw=2)
170
+
171
+
172
+
173
+ plt.figure()