【问题标题】:Keras output dimension mismatch in LSTMLSTM中的Keras输出尺寸不匹配
【发布时间】:2019-03-11 11:07:07
【问题描述】:

我一直在研究销售预测模型。该模型必须预测未来 11 天的产品销售情况。

数据集是这种形式: Productid, Sales_on_date_1,........Sales_on_date_142 我将前 131 个样本作为产品的特征集,并将 11 个样本作为标签。

共有 1636 种产品。我已将此建模为多元多步时间序列预测。

有 142 个时间步。

每个产品有 1 个样品。

我的代码如下:

    X=train_data[:,:131]
    y=train_data[:,131:]
    X=X.reshape((1,131,1636))
    y=y.reshape((1,11,1636)) 
    model=Sequential()
    model.add(LSTM(units=50,return_sequences=True,input_shape=(X.shape[1],X.shape[2])))
    model.add(Dropout(0.2))
    model.add(Dense(units=11))
    model.compile(optimizer = 'adam', loss = 'mean_squared_error')  
    model.fit(X, y, epochs = 100, batch_size = 1)

这是我得到的错误。

ValueError: 检查目标时出错:预期 dense_3 的形状为 (131, 11),但得到的数组的形状为 (11, 1636)

我是第一次做 LSTM。有人可以帮助我了解如何对标签数据的维度进行建模吗?

【问题讨论】:

    标签: python tensorflow keras


    【解决方案1】:

    由于您想一次预测一种产品,因此您的训练数据的形状应为 (#ofSamples, sizeOfSample, sampleDimensions),在您的情况下为 (1636, 311, 1),而您的标签应为 (1636, 11)。这意味着您不必重塑数据,只需向X 添加维度。试试这个:

    X=train_data[:,:131,np.newaxis]
    y=train_data[:,131:]
    model=Sequential()
    model.add(LSTM(units=50,return_sequences=True,input_shape=(X.shape[1],X.shape[2])))
    model.add(Dropout(0.2))
    model.add(Dense(units=11))
    model.compile(optimizer = 'adam', loss = 'mean_squared_error')  
    model.fit(X, y, epochs = 100, batch_size = 1)
    

    【讨论】:

    • 我试过你的方法。我收到以下错误。 ValueError: Input 0 is in compatible with layer lstm_8: expected ndim=3, found ndim=2
    • 哦,你是对的,我在那里做错了。编辑了我的答案,现在应该可以使用了
    猜你喜欢
    • 2016-11-01
    • 1970-01-01
    • 2017-02-26
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多