【问题标题】:How to extract cell state of LSTM model through model.fit()?如何通过model.fit()提取LSTM模型的细胞状态?
【发布时间】:2021-01-10 14:07:36
【问题描述】:

我的LSTM模型是这样的,我想得到state_c

def _get_model(input_shape, latent_dim, num_classes):

  inputs = Input(shape=input_shape)
  lstm_lyr,state_h,state_c = LSTM(latent_dim,dropout=0.1,return_state = True)(inputs)
  fc_lyr = Dense(num_classes)(lstm_lyr)
  soft_lyr = Activation('relu')(fc_lyr)
  model = Model(inputs, [soft_lyr,state_c])
  model.compile(optimizer='adam', loss='mse', metrics=['accuracy'])
return model
model =_get_model((n_steps_in, n_features),latent_dim ,n_steps_out)
history = model.fit(X_train,Y_train)

但我无法从历史记录中提取state_c。怎么退货?

【问题讨论】:

  • how to get state_c? 是什么意思。您的 LSTM 层已经返回 state_c。你能澄清一下吗?
  • 来自哪个变量?
  • lstm_lyr,state_h,state_c = LSTM(latent_dim,dropout=0.1,return_state = True)(inputs) 返回状态设置为true,它创建了3个张量,其中最后一个是state_c
  • 让我澄清一下,你想用这个模型实现什么?
  • 我想获得state_c 的价值

标签: python-3.x tensorflow keras lstm


【解决方案1】:

我不确定您所说的“如何获取 state_c”是什么意思,因为您的 LSTM 层已经返回带有 return_state=True 标志的 state_c。我假设您正在尝试在这种情况下训练多输出模型。目前,您只有一个输出,但您的模型是用多个输出编译的。

以下是使用多输出模型的方法。

from tensorflow.keras import layers, Model, utils

def _get_model(input_shape, latent_dim, num_classes):
    inputs = layers.Input(shape=input_shape)
    lstm_lyr,state_h,state_c = layers.LSTM(latent_dim,dropout=0.1,return_state = True)(inputs)
    fc_lyr = layers.Dense(num_classes)(lstm_lyr)
    soft_lyr = layers.Activation('relu')(fc_lyr)
    model = Model(inputs, [soft_lyr,state_c])   #<------- One input, 2 outputs
    model.compile(optimizer='adam', loss='mse')
    return model


#Dummy data
X = np.random.random((100,15,5))
y1 = np.random.random((100,4))
y2 = np.random.random((100,7))

model =_get_model((15, 5), 7 , 4)
model.fit(X, [y1,y2], epochs=4) #<--------- #One input, 2 outputs
Epoch 1/4
4/4 [==============================] - 2s 6ms/step - loss: 0.6978 - activation_9_loss: 0.2388 - lstm_9_loss: 0.4591
Epoch 2/4
4/4 [==============================] - 0s 6ms/step - loss: 0.6615 - activation_9_loss: 0.2367 - lstm_9_loss: 0.4248
Epoch 3/4
4/4 [==============================] - 0s 7ms/step - loss: 0.6349 - activation_9_loss: 0.2392 - lstm_9_loss: 0.3957
Epoch 4/4
4/4 [==============================] - 0s 8ms/step - loss: 0.6053 - activation_9_loss: 0.2392 - lstm_9_loss: 0.3661

【讨论】:

  • 训练后,哪个变量是最终的细胞状态?
  • 我不明白,在训练中,您必须提供 y1 和 y2 的实际数据。训练不是预测。你的第二个输出当前持有state_c ... model = Model(inputs, [soft_lyr,state_c])
  • 所以你的意思是我在model.fit()中输入了state_c
  • 模型的输入和输出就是你训练它预测的内容。在您的情况下,您正在设计一个网络来预测一个类,并且在给定输入的情况下它是最终的细胞状态。这就是你定义它的方式。你想达到什么目的。你能帮我描述一下吗?
  • 不过还是谢谢你们,你们给了我很多启发。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-20
  • 1970-01-01
  • 1970-01-01
  • 2017-09-15
  • 1970-01-01
相关资源
最近更新 更多