废话不多说,把代码贴上去,就可以运行。然后看注释,自己慢慢品,细细品。
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt# 1. 生成时间序列数据,这里使用正弦函数模拟
def generate_time_series():time_steps = np.linspace(0, 10 * np.pi, 500, dtype=np.float32)data = np.sin(time_steps)data = np.expand_dims(data, axis=-1)return data# 2. 划分训练集和测试集
def prepare_data(data):train_data = data[:400]test_data = data[400:]return train_data, test_data# 3. 创建数据集
def create_dataset(data, time_steps):Xs, ys = [], []for i in range(len(data) - time_steps):v = data[i:(i + time_steps)]Xs.append(v)ys.append(data[i + time_steps])return np.array(Xs), np.array(ys)# 4. 定义 LSTM 模型
def build_model(input_shape):model = tf.keras.Sequential([tf.keras.layers.LSTM(units=50, return_sequences=True, input_shape=input_shape),tf.keras.layers.LSTM(units=50),tf.keras.layers.Dense(units=1)])model.compile(optimizer='adam', loss='mse')return model# 5. 训练模型
def train_model(model, X_train, y_train, epochs=20):history = model.fit(X_train, y_train,epochs=epochs,batch_size=32,validation_split=0.1,shuffle=False)return history# 6. 预测和可视化结果
def predict_and_visualize(model, X_train, y_train, X_test, y_test):train_predict = model.predict(X_train)test_predict = model.predict(X_test)plt.figure(figsize=(10, 6))plt.plot(y_train, label='True Train')plt.plot(train_predict, label='Predicted Train')plt.plot(range(len(y_train), len(y_train) + len(y_test)), y_test, label='True Test')plt.plot(range(len(y_train), len(y_train) + len(y_test)), test_predict, label='Predicted Test')plt.legend(loc='upper left')plt.show()def plot_loss(history):plt.plot(history.history['loss'], label='Training Loss')plt.plot(history.history['val_loss'], label='Validation Loss')plt.title('Model Loss')plt.ylabel('Loss')plt.xlabel('Epoch')plt.legend(loc='upper right')plt.show()if __name__ == "__main__":# 生成数据data = generate_time_series()train_data, test_data = prepare_data(data)time_steps = 10X_train, y_train = create_dataset(train_data, time_steps)X_test, y_test = create_dataset(test_data, time_steps)# 构建模型input_shape = (X_train.shape[1], X_train.shape[2])model = build_model(input_shape)# 训练模型history = train_model(model, X_train, y_train, epochs=20)# 显示训练的loss,val_lossplot_loss(history)# 预测和可视化predict_and_visualize(model, X_train, y_train, X_test, y_test)