Tensorflow Keras LSTM 一次推理一个输入
Tensorflow Keras LSTM Inference one input at a time
我有以下序列标记 Keras 模型:
model = tf.keras.Sequential([
tf.keras.layers.Dropout(0.5),
tf.keras.layers.LSTM(64, return_sequences=True),
tf.keras.layers.Dense(2)
])
此模型采用一系列向量并预测两个 类 的对数。
在实时应用程序中,我每秒一次获取这些向量,我只想对收到的新向量执行推理,以便使用 LSTM 的先前隐藏状态。
例如,如果我只接收向量并且运行:
# Received a
model(a)
# Received b
model(b)
模型 运行 独立于两个向量(a
和 b
),并且不利用 LSTM 在步骤 [= 之后存储在隐藏状态中的时间信息13=].
有没有办法执行推理并使用这些状态?
不使用时间信息的示例预测代码
model = tf.keras.models.load_model('./.save/3jbry45d')
model.build(input_shape=(None, None, 25))
random_vec = tf.convert_to_tensor(np.random.randn(1, 1, 25))
for i in range(5):
print(model.predict(random_vec))
打印 5 次:
[[[ 0.11500816 -0.5686636 ]]]
那就试试这个:
model = tf.keras.Sequential([
tf.keras.layers.LSTM(64,
batch_input_shape = (1, None, 64),
return_sequences=True,
stateful = True),
tf.keras.layers.Dense(2)
])
for _ in range(10):
print(model.predict(np.ones(64)[np.newaxis, np.newaxis])[0, 0])
打印的向量会有所不同,因此会占用内存。
我有以下序列标记 Keras 模型:
model = tf.keras.Sequential([
tf.keras.layers.Dropout(0.5),
tf.keras.layers.LSTM(64, return_sequences=True),
tf.keras.layers.Dense(2)
])
此模型采用一系列向量并预测两个 类 的对数。
在实时应用程序中,我每秒一次获取这些向量,我只想对收到的新向量执行推理,以便使用 LSTM 的先前隐藏状态。
例如,如果我只接收向量并且运行:
# Received a
model(a)
# Received b
model(b)
模型 运行 独立于两个向量(a
和 b
),并且不利用 LSTM 在步骤 [= 之后存储在隐藏状态中的时间信息13=].
有没有办法执行推理并使用这些状态?
不使用时间信息的示例预测代码
model = tf.keras.models.load_model('./.save/3jbry45d')
model.build(input_shape=(None, None, 25))
random_vec = tf.convert_to_tensor(np.random.randn(1, 1, 25))
for i in range(5):
print(model.predict(random_vec))
打印 5 次:
[[[ 0.11500816 -0.5686636 ]]]
那就试试这个:
model = tf.keras.Sequential([
tf.keras.layers.LSTM(64,
batch_input_shape = (1, None, 64),
return_sequences=True,
stateful = True),
tf.keras.layers.Dense(2)
])
for _ in range(10):
print(model.predict(np.ones(64)[np.newaxis, np.newaxis])[0, 0])
打印的向量会有所不同,因此会占用内存。