python - Keras 模型 LSTM 预测 2 个特征

标签 python tensorflow keras lstm prediction

我正在尝试预测 2 个特征。这是我的模型的样子:

定义模型

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)

我的数据集有 9 个特征:

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) 特征。但我得到的只是第一个特征的预测,而不是第二个特征。

关于如何获得两个预测而不是一个的任何帮助?

最佳答案

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

(batch_size, look_back, x_train.shape[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),...)

关于python - Keras 模型 LSTM 预测 2 个特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52117648/

相关文章:

python - 使用 xlsxwriter 编码的 pandas 导致数据帧文本出现 'u' 前缀

tensorflow keras嵌入LSTM

python - Keras 访问自定义损失函数中的各个值

python - 神经网络验证准确性有时不会改变

python-3.x - 适用于 Keras 2.3 的 Tensorflow 包

python - 如何改写代码更优雅

python - 在 numpy 二维数组中按行查找值大于阈值的索引

python - 无法将有效的 CURL PUT 语句转换为有效的 python 脚本

tensorflow - 填充张量有什么影响?

python - 如何 reshape 颜色 channel 的 numpy 图像数组