gpt4 book ai didi

keras - 在 Keras 中,LSTM 状态何时在调用 model.predict 时重置?

转载 作者:行者123 更新时间:2023-12-04 14:56:12 26 4
gpt4 key购买 nike

该模型将 LSTM 作为其第一层。

在调用 model.predict 时说你传入了几个样本:

>sam = np.array([ [[.5, .6, .3]], [[.6, .6, .3]], [[.5, .6, .3]] ])
>model.predict(sam)
array([[ 0.23589483],
[ 0.2327884 ],
[ 0.23589483]])

上面我们看到了映射:[[.5, .6, .3]] -> 0.23589483 等等(1 个元素的序列,它是一个长度为 3 的向量,映射到一个实数)

该模型的 input_length 为 1,input_dim 为 3。请注意,第一个和最后一个相同并且具有相同的输出 (0.23589483)。所以我的假设是,在 Keras 处理一个样本(在这种情况下是 1 个 3-D 向量的序列)之后,它会重置模型的内存。即每个序列基本上是独立的。这种观点是否有任何不正确或误导之处?

再举一个 input_length 3 和 input_dim 1 的例子。这一次,在一个序列中切换值并看到不同的结果(比较第二个列表和最后一个)。因此,随着 Keras 处理一个序列,内存正在发生变化,但是当完成处理时,内存会重置(第一个和第二个序列具有相同的结果)。
sam = np.array([ [[.1],[.1],[.9]], [[.1],[.9],[.1]], [[.1],[.1],[.9]]   ])
model.predict(sam)
array([[ 0.69906837],
[ 0.1454899 ],
[ 0.69906837]])

上面我们看到映射 [[.1],[.1],[.9]] -> 0.69906837 等等(3 个元素到实数的序列)

最佳答案

我很欣赏这是一个老问题,但希望这个答案可以帮助像我这样的其他 Keras 初学者。

我在我的机器上运行这个例子并观察到 ​​LSTM 的隐藏状态和单元状态确实随着对 model.predict 的调用而改变。 .

import numpy as np
import keras.backend as K
from keras.models import Model
from keras.layers import LSTM

batch_size = 1
timestep_size = 2
num_features = 4

inputs = Input(batch_shape=(batch_size, timestep_size, num_features)
x = LSTM(num_features, stateful=True)(inputs)

model = Model(inputs=inputs, outputs=x)
model.compile(loss="mse",
optimizer="rmsprop",
metrics=["accuracy"])

x = np.random.randint((10,2,4))
y = np.ones((10,4))
model.fit(x,y, epochs=100, batch_size=1)

def get_internal_state(model):
# get the internal state of the LSTM
# see https://github.com/fchollet/keras/issues/218
h, c = [K.get_value(s) for s, _ in model.state_updates]
return h, c

print "After fitting:", get_internal_state(model)

for i in range(3):
x = np.random.randint((10,2,4))
model.predict(x)
print "After predict:", get_internal_state(model)

这是对 get_internal_state 的调用输出的示例训练结束后:
After_fitting: (array([[ 1.,  1.,  1.,  1.]], dtype=float32), array([[  11.33725166,   11.8036108 ,  181.75688171,   25.50110626]], dtype=float32))
After predict (array([[ 1. , 0.99999994, 1. , 1. ]], dtype=float32), array([[ 9.26870918, 8.83847237, 179.92633057, 28.89341927]], dtype=float32))
After predict (array([[ 0.99999571, 0.9992013 , 1. , 0.9915328 ]], dtype=float32), array([[ 6.5174489 , 8.55165958, 171.42166138, 25.49199104]], dtype=float32))
After predict (array([[ 1., 1., 1., 1.]], dtype=float32), array([[ 9.78496075, 9.27927303, 169.95401001, 28.74017715]], dtype=float32))

关于keras - 在 Keras 中,LSTM 状态何时在调用 model.predict 时重置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39196945/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com