代码之家  ›  专栏  ›  技术社区  ›  Felix

LSTM多对多培训,批量独立示例

  •  0
  • Felix  · 技术社区  · 6 年前

    我仍在研究LSTM,并尝试提出最佳和适当的培训程序和数据形状。

    时间序列代表音符。让我们称之为一首歌。所以我有以下形式的数据。序列由一个热编码的注释组成。所以它们有形状 (timesteps, features) . 这个系列的复制品是通过变换(向上移动)系列的音符而制作的十二次。一首歌就会成形 (12, timesteps, features) . 这十二个系列中的每一个都应该接受独立的培训。此外,还有多首长度不同的歌曲。

    我想训练一个LSTM,以便在一系列的每一步都进行预测。所以12个系列中的一个的训练数据是 X = series[:-1, :], Y = series[1:, :] 同样地,对于所有12个版本。

    # Example data, numbers not one-hot encoded for brevity
    series = [1, 3, 2, 4, 7, 7, 10]
    X = [1, 3, 2, 4, 7, 7]
    Y = [3, 2, 4, 7, 7, 10]   # Shifted 1 step back
    

    这12种变体将创建一个自然批次,因为长度没有变化。但我的问题是:

    a naïve approach

    # X = (12 * timesteps, 1, features), Y = (12 * timesteps, features)
    model = Sequential()
    model.add(LSTM(256, input_shape=(None, X.shape[-1]), batch_size=1, stateful=True))
    model.add(Dense(Y.shape[-1], activation='softmax'))
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['categorical_accuracy'])
    
    for epoch in range(10):
        model.fit(X, Y, epochs=1, batch_size=1, shuffle=False)
        model.reset_states()
    

    1 回复  |  直到 6 年前
        1
  •  1
  •   today    6 年前

    TimeDistributed softmax

    from keras import models, layers
    
    n_features = 20
    
    model_input = layers.Input(shape=(12, None, n_features))
    x = layers.TimeDistributed(layers.LSTM(64, return_sequences=True))(model_input)
    model_output = layers.Dense(n_features, activation='softmax')(x)
    
    model = models.Model([model_input], [model_output])
    model.compile(loss='categorical_crossentropy', optimizer='rmsprop')
    model.summary()
    

    Layer (type)                 Output Shape              Param #   
    =================================================================
    input_1 (InputLayer)         (None, 12, None, 20)      0         
    _________________________________________________________________
    time_distributed_1 (TimeDist (None, 12, None, 64)      21760     
    _________________________________________________________________
    dense_1 (Dense)              (None, 12, None, 20)      1300      
    =================================================================
    Total params: 23,060
    Trainable params: 23,060
    Non-trainable params: 0
    _________________________________________________________________
    

    Seq2Seq tutorial

    CuDNNLSTM