首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于Keras LSTM的输出

关于Keras LSTM的输出
EN

Stack Overflow用户
提问于 2019-07-24 21:30:08
回答 1查看 2.1K关注 0票数 0

我使用Keras构建了一个LSTM体系结构。我的目标是映射长度29时间序列的浮标输入序列到长度29输出序列的浮点数。我正在尝试实施一种“多对多”的方法。我遵循this post实现了这样一个模型。

首先,我将每个数据点重组为一个形状为np.array‘(1,29,1)。我有多个数据点,并分别对模型进行训练。下面的代码是我如何构建模型的:

代码语言:javascript
复制
def build_model():
    # define model
    model = tf.keras.Sequential()
    model.add(tf.keras.layers.LSTM(29, return_sequences=True, input_shape=(29, 1)))
    model.add(tf.keras.layers.LeakyReLU(alpha=0.3))

    model.compile(optimizer='sgd', loss='mse', metrics = ['mae'])

    #cast data
    for point in train_dict:
        train_data = train_dict[point]

        train_dataset = tf.data.Dataset.from_tensor_slices((
            tf.cast(train_data[0], features_type),
            tf.cast(train_data[1], target_type))
        ).repeat() #cast into X, Y

        # fit model


        model.fit(train_dataset, epochs=100,steps_per_epoch = 1,verbose=0)


        print(model.summary())   
    return model 

我很困惑,因为当我调用model.predict(test_point, steps = 1, verbose = 1)时,模型返回29个长度29序列!我不明白为什么会发生这种情况,根据我从链接帖子中得到的理解。当我尝试return_state=True而不是return_sequences=True时,我的代码会引发以下错误:ValueError: All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.

我该如何解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-25 00:19:43

你的模型几乎没有瑕疵。

  1. 模型的最后一层是LSTM。假设你在做分类/回归。然后是密集层(SoftMax/sigmoid -分类,线性回归)。但是由于这是一个时间序列问题,稠密层应该被包装在一个TimeDistributed包装中。
  2. 在LSTM之上应用LeakyReLU是很奇怪的。

我已经修复了针对上述问题的代码。看看这是否有帮助。

代码语言:javascript
复制
from tensorflow.keras.layers import Embedding, Input, Bidirectional, LSTM, Dense, Concatenate, LeakyReLU, TimeDistributed
from tensorflow.keras.initializers import Constant
from tensorflow.keras.models import Model
from tensorflow.keras.models import Sequential
def build_model():
    # define model
    model = Sequential()
    model.add(LSTM(29, return_sequences=True, input_shape=(29, 1)))
    model.add(TimeDistributed(Dense(1)))
    model.compile(optimizer='sgd', loss='mse', metrics = ['mae'])


    print(model.summary())   
    return model 

model = build_model()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57191517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档