ValueError:“顺序”层的输入 0 与该层不兼容:预期形状=(None, 60, 1),找到的形状=(None, 61, 1)

问题描述 投票:0回答:0

问题陈述:我有一个数据集,其中包含售出机票的分钟级计数。格式看起来像这样:

"datetime","count"
"2022-09-29 00:00:00",273
"2022-09-29 00:01:00",265

我的模型使用 LSTM 进行训练(这是一个示例代码 - 没有复杂性)。当我运行预测方法时,它一直给我这个错误。 :

ValueError: Input 0 of layer "sequential" is incompatible with the layer: expected shape=(None, 60, 1), found shape=(None, 61, 1)

这是我的完整代码:

import pandas as pd
import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, LSTM, Dropout
from sklearn.preprocessing import MinMaxScaler
from datetime import datetime
from sklearn.metrics import mean_squared_error

from flask import Flask, request, jsonify


# Load data
df = pd.read_csv("training_data.csv", parse_dates=['datetime'], index_col='datetime')

# Split data into training and testing sets
train_size = int(len(df) * 0.8)
train_data, test_data = df.iloc[:train_size], df.iloc[train_size:]

# Normalize the data
scaler = MinMaxScaler()
train_scaled = scaler.fit_transform(train_data)
test_scaled = scaler.transform(test_data)

# Define function to create sequences
def create_sequences(data, seq_length):
    X, y = [], []
    for i in range(len(data)-seq_length):
        X.append(data[i:i+seq_length])
        y.append(data[i+seq_length])
    return np.array(X), np.array(y)

# Create sequences
seq_length = 60
train_X, train_y = create_sequences(train_scaled, seq_length)
test_X, test_y = create_sequences(test_scaled, seq_length)

# Define LSTM model
model = Sequential()
model.add(LSTM(4, return_sequences=True, input_shape=(seq_length, 1)))
#model.add(Dropout(0.2))
#model.add(LSTM(64, return_sequences=True))
#model.add(Dropout(0.2))
#model.add(LSTM(32))
#model.add(Dropout(0.2))
model.add(Dense(1))

# Compile model
model.compile(optimizer='adam', loss='mse')

# Train model
history = model.fit(train_X, train_y, epochs=2, batch_size=1, validation_data=(test_X, test_y), verbose=1)

# Save model
model.save('lstm_model.h5')

# Make prediction
def make_prediction(date_time):
    model = tf.keras.models.load_model('lstm_model.h5')
    date_time = datetime.strptime(date_time, '%Y-%m-%d %H:%M:%S')
    data = df.loc[date_time - pd.Timedelta(minutes=seq_length):date_time]
    data_scaled = scaler.transform(data)
    X = np.array([data_scaled])
    y_pred = model.predict(X)
    return scaler.inverse_transform(y_pred)[0][0]

app = Flask(__name__)

@app.route('/predict', methods=['POST'])
def predict():
    date_time = request.form['date_time']
    prediction = make_prediction(date_time)
    return {'prediction': prediction}

if __name__ == '__main__':
    app.run(debug=True)

这是我用来调用预测的 curl 命令:

curl -X POST -F "date_time=2022-10-01 12:00:00" http://localhost:5000/predict

请帮忙! 感谢您花在我的问题上的任何时间:-)

python pandas tensorflow machine-learning lstm
© www.soinside.com 2019 - 2024. All rights reserved.