【发布时间】:2019-08-19 00:32:16
【问题描述】:
我正在尝试使用 Keras 中的多输入模型同时使用时间序列(即过去 n 个月的收入)和时间不变的客户数据(即性别、职业)来预测客户收入。为此,我使用 LSTM 模型预测时间 (n+1) 的收入,然后引入客户数据作为辅助输入。
第一个模型 (LSTM) 产生了不错的结果,但添加辅助层似乎产生了一个悖论,因为每个客户的预测都是相同的值。有什么建议为什么会发生这种情况?
已经尝试了多个批量大小并转换了一些数值变量,但问题仍然存在。
from keras.layers import Input, LSTM, Dense, concatenate
from keras.models import Model
'''
train_X1: time series data, customer revenues, 1 to (n-1)
train_X2: customer demographics
'''
train_X1 = np.asarray(X1.drop('id', axis = 1))
train_X1 = train_X1.reshape(train_X1.shape[0], train_X1.shape[1], 1)
print(train_X1.shape)
train_X2 = np.asarray(X2.drop('id', axis = 1))
print(train_X2.shape)
main_input = Input(shape = (20,1), name = "main_input")
hidden = Dense(10, activation = 'tanh')(main_input)
hidden = LSTM(10)(hidden)
aux_output = Dense(1, name = 'aux_output')(hidden)
train_X2 = np.asarray(X2.drop('id', axis = 1))
train_X2 = train_X2.reshape(train_X2.shape[0], train_X2.shape[1])
print(train_X2.shape)
aux_input = Input(shape = (2, ), name = "aux_input")
hidden = concatenate([aux_output, aux_input])
hidden = Dense(2, activation = 'relu')(hidden)
main_output = Dense(1, name = "main_output")(hidden)
model = Model(inputs = [main_input, aux_input], outputs = [main_output, aux_output])
model.compile(optimizer ='adam',
loss = {'main_output': 'mean_squared_error', 'aux_output': 'mean_squared_error'},
loss_weights = {'main_output': 1, 'aux_output': 0.2})
model.fit({'main_input': train_X1, 'aux_input': train_X2},
{'main_output': y, 'aux_output': y},
epochs = 50, batch_size = 5)
预期会有不同的预测,但此代码仅导致单值预测。 (见图)
注意:我目前只在一个非常小的数据集中模拟这项工作,然后才能将其扩展到更大的集合。这可能是数据问题吗?
【问题讨论】:
标签: python-3.x keras deep-learning lstm keras-layer