问题陈述:我有一个数据集,其中包含售出机票的分钟级计数。格式看起来像这样:
"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
请帮忙! 感谢您花在我的问题上的任何时间:-)