我使用 Keras 创建了一个 LSTM,并以 TensorFlow 作为后端。在 num_step 为 96 的小批量进行训练之前,LSTM 的隐藏状态被设置为前一个时间步的真实值。
首先是参数和数据:
batch_size = 10
num_steps = 96
num_input = num_output = 2
hidden_size = 8
X_train = np.array(X_train).reshape(-1, num_steps, num_input)
Y_train = np.array(Y_train).reshape(-1, num_steps, num_output)
X_test = np.array(X_test).reshape(-1, num_steps, num_input)
Y_test = np.array(Y_test).reshape(-1, num_steps, num_output)
Run Code Online (Sandbox Code Playgroud)
Keras 模型由两个 LSTM 层和一层将输出修剪为 num_output(即 2):
model = Sequential()
model.add(LSTM(hidden_size, batch_input_shape=((batch_size, num_steps, num_input)),
return_sequences=True, stateful = True)))
model.add(LSTM(hidden_size, return_sequences=True)))
model.add(Dropout(0.2))
model.add(TimeDistributed(Dense(num_output, activation='softmax')))
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])
Run Code Online (Sandbox Code Playgroud)
生成器以及训练(hidden_states[x] 的形状为 (2,)):
def gen_data():
x = np.zeros((batch_size, num_steps, …Run Code Online (Sandbox Code Playgroud)