#python #python-3.x #keras #lstm #tf.keras
#python #python-3.x #keras #lstm #tf.keras
Вопрос:
Я изо всех сил пытаюсь понять этот код, который сочетает в себе оба CONV1D
и LSTM
.
model = tf.keras.models.Sequential([
tf.keras.layers.Conv1D(filters=32, kernel_size=5,
strides=1, padding="causal",
activation="relu",
input_shape=[None, 1]),
tf.keras.layers.LSTM(64, return_sequences=True),
tf.keras.layers.LSTM(64, return_sequences=True),
tf.keras.layers.Dense(30, activation="relu"),
tf.keras.layers.Dense(10, activation="relu"),
tf.keras.layers.Dense(1),
tf.keras.layers.Lambda(lambda x: x * 400)
])
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv1d (Conv1D) (None, None, 32) 192
_________________________________________________________________
lstm (LSTM) (None, None, 64) 24832
_________________________________________________________________
lstm_1 (LSTM) (None, None, 64) 33024
_________________________________________________________________
dense (Dense) (None, None, 30) 1950
_________________________________________________________________
dense_1 (Dense) (None, None, 10) 310
_________________________________________________________________
dense_2 (Dense) (None, None, 1) 11
_________________________________________________________________
lambda (Lambda) (None, None, 1) 0
=================================================================
Total params: 60,319
Trainable params: 60,319
Non-trainable params: 0
_________________________________________________________________
Если мы удалим CONV1D
слой и второй LSTM
слой, я в полном порядке. Тем не менее, я глубоко смущен этой структурой.
Во-первых, почему мы добавляем return_sequences=True
второй LSTM
уровень? Обычно мы добавляем только return_sequences=True
на первом LSTM
уровне в случае stacked LSTM
. В этой модели мы добавляем его к обоим.
Во-вторых, почему input_shape=[None, 1]
CONV1D
слой in? не CONV1D
является и LSTM
несколько похожим по форме?
Conv1D: (batch, length, channels)
LSTM: (batch, timeSteps, features)
Очень признателен, если вы можете поделиться ссылкой, которая объясняет, как объединить обе модели.
Ответ №1:
Если вы хотите, чтобы ваш вывод представлял собой последовательность, например, если вы хотите предсказать 10 следующих значений, последним return_sequences
должно быть True
. Если у вас есть 10 временных шагов в ваших данных, он вернет последовательность из 10 временных шагов. Например.:
import numpy as np
import tensorflow as tf
model = tf.keras.models.Sequential([
tf.keras.layers.Conv1D(filters=32, kernel_size=5,
strides=1, padding="causal",
activation="relu",
input_shape=[None, 1]),
tf.keras.layers.LSTM(64, return_sequences=True),
tf.keras.layers.LSTM(64, return_sequences=True),
tf.keras.layers.Dense(30, activation="relu"),
tf.keras.layers.Dense(10, activation="relu"),
tf.keras.layers.Dense(1),
tf.keras.layers.Lambda(lambda x: x * 400)
])
model(np.random.rand(1, 10, 1))
<tf.Tensor: shape=(1, 10, 1), dtype=float32, numpy=
array([[[ 0.12037009],
[ 0.19570792],
[ 0.3986496 ],
[ 0.56172705],
[-0.06423644],
[-0.4780491 ],
[-0.82960564],
[-1.2271142 ],
[-1.8704925 ],
[-2.294954 ]]], dtype=float32)>
Я не понимаю вашего второго вопроса.
Комментарии:
1. Спасибо Николас за ответ. Я понимаю, что вы имеете в виду. Но мой вопрос в том, как это возможно, что мы можем объединить
return_sequences=True
соdense
слоем? Обычно мы делаем это сreturn_sequences=False
помощью . Что касается моего второго вопроса, я не понимаюinput_shape
CONV1D
слоя.
Ответ №2:
Этот код использует sequence-to-sequence
прогнозирование, а не sequence-to-vector
так, как описано в этом видео (ссылка ниже). Именно по этой причине мы добавили return_sequences=True
оба LSTM
слоя.
Это отличный курс для временных рядов forecasting
с использованием neural networks