代码之家  ›  专栏  ›  技术社区  ›  Ofek Ron

并行LSTM,每个LSTM在输入的不同部分工作

  •  0
  • Ofek Ron  · 技术社区  · 7 年前

    为了得到像图片中那样的模型,需要对代码做什么更改?

            model = Sequential()
            model.add(LSTM(256, input_shape=(self.timestamps, len(columns)), activation=keras.activations.tanh,
                           recurrent_activation=keras.activations.tanh))
            model.add(Dense(6, activation=keras.activations.tanh))
            model.summary()
            model.compile(loss=keras.losses.mean_squared_error, optimizer=keras.optimizers.RMSprop())
    

    stdScore

    input 因为这个模型的形状是(10,30,6),那么我想要 input[:,:15,:] 流入左LSTM input[:,15:,:]

    0 回复  |  直到 7 年前
        1
  •  1
  •   Luke DeLuccia    7 年前

    Keras Functional API

    from keras.layers import Input, LSTM, concatenate, Dense
    from keras.models import Model
    
    input_1 = Input(shape=(15, 6), name='input_1')
    input_2 = Input(shape=(15, 6), name='input_2')
    lstm1 = LSTM(256, name='lstm1')(input_1)
    lstm2 = LSTM(256, name='lstm2')(input_2)
    concat = concatenate([lstm1, lstm2]) 
    output = Dense(6, activation='tanh', name='dense')(concat)
    model = Model(inputs=[input_1, input_2], outputs=output)
    

    如果您不想使用多个输入 Lambda

    from keras.layers import Input, LSTM, concatenate, Dense, Lambda
    from keras.models import Model
    
    input_ = Input(shape=(30, 6), name='input')
    input_1 = Lambda(lambda x: x[:, :15, :])(input)
    input_2 = Lambda(lambda x: x[:, 15:, :])(input)
    lstm1 = LSTM(256, name='lstm1')(input_1)
    lstm2 = LSTM(256, name='lstm2')(input_2)
    concat = concatenate([lstm1, lstm2]) 
    output = Dense(6, activation='tanh', name='dense')(concat)
    model = Model(inputs=input_, outputs=output)
    

    你会打电话给 fit 每个示例的函数分别如下:


    model.fit(x=[input_1, input_2], y=y)

    或者

    model.fit(x={'input_1': input_1, 'input_2': input_2}, y=y)


    单输入:

    model.fit(x=input_, y=y)