質問編集履歴
1
コードの修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
とある論文(有料論文のため本文・図の引用は
|
1
|
+
とある論文(有料論文のため本文・図の引用は避けます)で、非時系列データを含む LSTM モデルというものがあり、それを Keras/TensorFlow のカスタムレイヤーで作成しようとしています。
|
2
2
|
|
3
3
|
構造としては、時系列データは従来の LSTM と同様に入力ゲート、出力ゲート、忘却ゲート、ブロック入力に入力されますが、非時系列データは4つのうちブロック入力には入力されず、これにより記憶する必要のない非時系列データがメモリセルに記憶されず、非時系列データを含んだデータの学習精度が向上するといったものです。
|
4
4
|
|
@@ -80,7 +80,7 @@
|
|
80
80
|
|
81
81
|
import numpy as np
|
82
82
|
|
83
|
-
from tensorflow.keras.layers import Input, RNN, AbstractRNNCell
|
83
|
+
from tensorflow.keras.layers import Input, Dense, RNN, AbstractRNNCell
|
84
84
|
|
85
85
|
from tensorflow.python.keras import activations, constraints, initializers, regularizers
|
86
86
|
|
@@ -180,7 +180,7 @@
|
|
180
180
|
|
181
181
|
self.kernel1 = self.add_weight(shape=(input_dim1, self.units * 4),
|
182
182
|
|
183
|
-
name='kernel',
|
183
|
+
name='kernel1',
|
184
184
|
|
185
185
|
initializer=self.kernel_initializer,
|
186
186
|
|
@@ -190,7 +190,7 @@
|
|
190
190
|
|
191
191
|
self.kernel2 = self.add_weight(shape=(input_dim2, self.units * 3),
|
192
192
|
|
193
|
-
name='kernel',
|
193
|
+
name='kernel2',
|
194
194
|
|
195
195
|
initializer=self.kernel_initializer,
|
196
196
|
|
@@ -308,11 +308,11 @@
|
|
308
308
|
|
309
309
|
f = self.recurrent_activation(x_f + K.dot(h_tm1, self.recurrent_kernel[:, :self.units])) # 忘却ゲート
|
310
310
|
|
311
|
-
u = self.activation(x_u + K.dot(h_tm1, self.recurrene_kernel[:, self.units:self.units * 2])) #
|
311
|
+
u = self.activation(x_u + K.dot(h_tm1, self.recurrene_kernel[:, self.units:self.units * 2])) # ブロック入力
|
312
|
-
|
312
|
+
|
313
|
-
i = self.recurrent_activation(x_i + K.dot(h_tm1, self.recurrent_kernel[:, self.units * 2:self.units * 3])) #
|
313
|
+
i = self.recurrent_activation(x_i + K.dot(h_tm1, self.recurrent_kernel[:, self.units * 2:self.units * 3])) # 入力ゲート
|
314
|
-
|
314
|
+
|
315
|
-
o = self.recurrent_activation(x_o + K.dot(h_tm1, self.recurrent_kernel[:, self.units * 3:self.units * 4])) #
|
315
|
+
o = self.recurrent_activation(x_o + K.dot(h_tm1, self.recurrent_kernel[:, self.units * 3:self.units * 4])) # 出力ゲート
|
316
316
|
|
317
317
|
|
318
318
|
|
@@ -340,15 +340,11 @@
|
|
340
340
|
|
341
341
|
t_input = Input(shape=(30, 1))
|
342
342
|
|
343
|
-
print(t_input.shape)
|
344
|
-
|
345
343
|
n_input = Input(shape=(30, 1))
|
346
344
|
|
347
|
-
print(n_input.shape)
|
348
|
-
|
349
345
|
h = NontsLSTM(128)([t_input, n_input])
|
350
346
|
|
351
|
-
output = Dense(1, activation='linear')
|
347
|
+
output = Dense(1, activation='linear')(h)
|
352
348
|
|
353
349
|
|
354
350
|
|