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

Keras模型LSTM预测2个特征

  •  3
  • user1111  · 技术社区  · 6 年前

    定义模型

    def my_model():
        input_x = Input(batch_shape=(batch_size, look_back, x_train.shape[2]), name='input')
        drop = Dropout(0.5)
    
        lstm_1 = LSTM(100, return_sequences=True, batch_input_shape=(batch_size, look_back, x_train.shape[2]), name='3dLSTM', stateful=True)(input_x)
        lstm_1_drop = drop(lstm_1)
        lstm_2 = LSTM(100, batch_input_shape=(batch_size, look_back, x_train.shape[2]), name='2dLSTM', stateful=True)(lstm_1_drop)
        lstm_2_drop = drop(lstm_2)
    
        y1 = Dense(1, activation='relu', name='op1')(lstm_2_drop)
        y2 = Dense(1, activation='relu', name='op2')(lstm_2_drop)
    
        model = Model(inputs=input_x, outputs=[y1,y2])
        optimizer = Adam(lr=0.001, decay=0.00001)
        model.compile(loss='mse', optimizer=optimizer,metrics=['mse'])
        model.summary()
        return model
    
    model = my_model()
    
    for j in range(50):
        start = time.time()
        history = model.fit(x_train, [y_11_train,y_22_train], epochs=1, batch_size=batch_size, verbose=0, shuffle=False)
        model.reset_states()
        print("Epoch",j, time.time()-start,"s")
    
    p = model.predict(x_test, batch_size=batch_size)
    

    x_train (31251, 6, 9)
    y_11_train (31251,)
    y_22_train (31251,)
    x_test (13399, 6, 9)
    y_11_test (13399,)
    y_22_test (13399,)
    

    我想预测第一个( y_11 y_22 )我的数据集的功能。但我得到的预测只是第一个特征,而不是第二个特征。

    有什么能帮我得到两个预测而不是一个?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Ioannis Nasios    6 年前

    首先,您应该删除同一事物的多个输入:

    (批次大小,向后看,x)_列车形状[2])

    此外,请尝试将输出连接到模型中,如下所示:

    def my_model():
        from keras.layers import concatenate
    
        lstm_1 = LSTM(100, return_sequences=True, batch_input_shape=(batch_size, look_back, x_train.shape[2]), name='3dLSTM', stateful=True)
        lstm_1_drop = drop(lstm_1)
        lstm_2 = LSTM(100, name='2dLSTM', stateful=True)(lstm_1_drop)
        lstm_2_drop = drop(lstm_2)
    
        y1 = Dense(1, activation='linear', name='op1')(lstm_2_drop)
        y2 = Dense(1, activation='linear', name='op2')(lstm_2_drop)
    
        y= concatenate([y1,y2])
    
        model = Model(inputs=input_x, outputs=y)
        optimizer = Adam(lr=0.001, decay=0.00001)
        model.compile(loss='mse', optimizer=optimizer,metrics=['mse'])
        model.summary()
        return model
    

    编辑

    y_11_train = y_11_train.reshape(y_11_train.shape[0],1)
    y_22_train = y_22_train.reshape(y_22_train.shape[0],1)
    model = my_model()
    model.fit(x_train,np.concatenate((y_11_train,y_22_train),axis=1),...)