Ошибка значения: ввод 0 несовместим со слоем sequential_19: ожидаемая форма =(Нет, Нет, 1), найденная форма=[Нет, 20, 5]

#python #tensorflow #lstm

#питон #тензорный поток #lstm

Вопрос:

В моем проекте я использую модель RNN под названием LSTM для прогнозирования тенденции акций.

 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 и испытываю трудности с настройкой формы модели. Заранее спасибо!

Комментарии:

1. Форма ваших данных не привязана к модели. Вы должны изменить либо данные, либо модель

2. Где в вашей функции вы вызываете layers ? также, что у вас X_train.shape ?

3. @AlaTarighati Раньше в этой функции были слои. Я забыл его удалить. Это должно быть def build_model():

4. Мы с @AlaTarighati добавили больше содержимого моего кода, чтобы сделать описание вопроса более подробным. Вы можете прочитать это сейчас.