ValueError:输入0与层顺序_19不兼容:预期的形状=(无,无,1),找到的形状=[无,20,5]

2024-10-04 03:23:50 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的项目中,我使用一个名为LSTM的RNN模型来预测股票的走势

def standard_scaler(Xtraining, Xtesting):
    trainSamples= Xtraining.shape
    trainx=Xtraining.shape
    trainy=Xtraining.shape
    testSamples= Xtesting.shape
    testx=Xtesting.shape
    testy=Xtesting.shape
    
    Xtraining = Xtraining.reshape((trainSamples, trainx * trainy))
    Xtesting = Xtesting.reshape((testSamples, testx * testy))
    
    preprocessor = prep.StandardScaler().fit(Xtraining)
    Xtraining = preprocessor.transform(Xtraining)
    Xtesting = preprocessor.transform(Xtesting)
    
    Xtraining = Xtraining.reshape((trainSamples, trainx, trainy))
    Xtesting = Xtesting.reshape((testSamples, testx, testy))
    
    return Xtraining, Xtesting

def preprocess_data(stocks, sequenceLength2):
    AmountofFeatures = len(stocks.columns)
    data = stocks.values
    
    sequenceLength = sequenceLength2 + 1
    result = []
    for index in range(len(data) - sequenceLength):
        result.append(data[index : index + sequenceLength])
        
    result = np.array(result)
    row = round(0.9 * result.shape[0])
    train = result[: int(row), :]
    train  = standard_scaler(train, result)
    result = standard_scaler(train, result)
    
    Xtraining = train[:, : -1]
    Ytraining = train[:, -1][: ,-1]
    Xtesting = result[int(row) :, : -1]
    Ytesting = result[int(row) :, -1][ : ,-1]

    Xtraining = np.reshape(Xtraining, (Xtraining.shape[0], Xtraining.shape[1], AmountofFeatures))
    Xtesting = np.reshape(Xtesting, (Xtesting.shape[0], Xtesting.shape[1], AmountofFeatures))  

    return Xtraining, Ytraining, Xtesting, Ytesting


def build_model():
        model = Sequential()
        model.add(LSTM(units=100,input_shape=(10,1),return_sequences=True))
        model.add(Dropout(0.2))
        model.add(LSTM(100, return_sequences=False))
        model.add(Dropout(0.2))
        model.add(Dense(units=1))
        start = time.time()
        model.compile(loss="mse", optimizer="rmsprop", metrics=['accuracy'])
        print("Compilation Time : ", time.time() - start)
    
    return model

我建立了一个LSTM模型,试图绘制模型。我检查代码时没有错误

window = 20
X_training, y_training, X_testing, y_testing = preprocess_data(data[:: -1], window)
model = build_model([X_training.shape[2], window, 100, 1])
model.fit(X_training, y_training, epochs=2, batch_size=500,verbose=0)
plt.plot(pred, color='red', label='Prediction')
plt.plot(y_testing, color='blue', label='Ground Truth')
plt.legend(loc='upper left')
plt.show()

但是,正如我在标题中提到的,这个错误突然出现了

ValueError: Input 0 is incompatible with layer sequential_20: expected shape=(None, None, 1), found shape=[None, 20, 5]

Spyder console表示,问题来自这一声明

model.fit(X_training, y_training, epochs=2, batch_size=500,verbose=0)

有人能告诉我如何修理model.fit吗?我是LSTM模型的新手,很难调整模型的形状。提前谢谢


Tags: 模型adddatamodelreturntrainingtrainresult