【问题标题】:Time series translation into Keras input时间序列转换为 Keras 输入
【发布时间】:2018-09-09 16:02:29
【问题描述】:

我有时间序列数据 (ECG)。我有 30 秒块的注释。 每个块有 1000 个数据点。我们有 500 个这样的数据块。

目标,注释例如在 1 到 5 的范围内。

要清楚请看图

关于 X-DATA

如何将其转换为输入数据 [样本、时间步长、特征] 的 Keras 表示法?

我的猜测:

  • 样本=块 (500)
  • timesteps=values(1000)
  • features= ECG 本身 (1)

导致 [500,1000,1]

关于 Y 数据(目标)

我的目标或 y 数据将导致 [500,1,1]

经过一次热编码后 [500,5,1]

问题在于 Keras 期望 X 和 y 数据具有相同的维度。但是将我的 ydata 增加到每个时间步长 1000 对我来说没有意义。

感谢您的帮助

附言无法直接回答,因为我和岳父母在一起。提前致谢

【问题讨论】:

    标签: input keras time-series


    【解决方案1】:

    我认为您对 y 的看法不正确。根据我的理解,基于你的图表。 y 在一次热编码后实际上是 (500, 5) 。也就是说,对于每个块,都有一个结果。

    此外,在 Keras 中,X 和 y 也不需要具有相同的维度(除非您有 seq2seq 要求,但这里不是这种情况)。

    我们真正想要的是给我们一个概率分布的模型 每个块的可能标签,我们将使用 softmax 来实现 在最后一个 (Dense) 层上。

    这是我模拟您的问题的方法:

    import numpy as np
    from keras.models import Model
    from keras.layers import Dense, LSTM
    
    
    # using eye doesn't capture one-hot but works for the example
    series = np.random.rand(500, 1000, 1)
    labels = np.eye(500, 5)
    
    inp = Input(shape=(1000, 1))
    lstm = LSTM(128)(inp)
    out = Dense(5, activation='softmax')(lstm)
    model = Model(inputs=[inp], outputs=[out])
    model.summary()
    model.compile(loss='categorical_crossentropy', optimizer='adam')
    model.fit(series, labels)
    

    【讨论】:

    • 亲爱的 putonspectacles,非常感谢。需要明确的是,我对 X 数据的假设是否正确?确实,经过一次热编码后,我实际上有 Y of (500,1)。我添加了另一个维度,因为我认为它必须与 X 数据具有相同的维度。对于第一个测试,我使用带有 softmax 层的顺序模型作为输出。 ... .
    • ...在那里,我收到一个值错误,告诉我它期望与输入相同的尺寸(现在 y beeing [500,5] 并且输出设置为 5)。这开始了我的困惑。使用 sigmoid 不提高值错误是否有区别?再次感谢你的帮助。复活节快乐,如果你庆祝的话。
    • 您对 X 的假设似乎很好。 Sigmoid 给出了类的概率,因此在这种情况下它输出一个 (?, 5) 数组,这就是目标 y 的形状。所以我们不会得到值错误。
    猜你喜欢
    • 2020-01-05
    • 2022-01-06
    • 1970-01-01
    • 2018-05-11
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    相关资源
    最近更新 更多