python lstm天气预测

python lstm天气预测 为什么第四行总是报错

img

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from keras.layers import Dense, LSTM, Input
from tensorflow.keras.callbacks import EarlyStopping
from tensorflow.keras import optimizers
from keras.models import Model
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
def creat_dataset(dataset, look_back):
    dataX, dataY = [], []
    for i in range(len(dataset)-look_back-1):
        a = dataset[i:(i+look_back)]
        dataX.append(a)
        dataY.append(dataset[i+look_back])
    print(np.array(dataX).shape)
    print(np.array(dataY).shape)
    return np.array(dataX), np.array(dataY)
# 读取数据
df = pd.read_csv('handan.csv')

# 特征工程
look_back = 1
dataset = np.array(df[['tem']])
trainX, trainY = creat_dataset(dataset, look_back)
# lstm
def model1(input_shape):
        inputs = Input(shape=input_shape)
        x = LSTM(64)(inputs)
        x = Dense(100)(x)
        x = Dense(1)(x)
        model = Model(inputs=inputs, outputs=x)  # 建立模型
        return model
# 模型的训练

model = model1(trainX.shape[1:])  # 实例化模型
batch_size = 4  # 每一训练批次的样本数量
epochs = 800  # 最大训练轮数
opt = optimizers.Adam(learning_rate=0.001)  # 优化器
model.compile(loss='mse',
              optimizer=opt,
              metrics=['mae', 'mse'])
early_stopping = EarlyStopping(monitor='loss', min_delta=0.001, patience=20)  # 早停策略
history = model.fit(
        trainX, trainY,
        batch_size=batch_size,
        epochs=epochs,
        use_multiprocessing=True,  # 使用多线程
        callbacks=[early_stopping])  # 训练模型
# 测试集上预测
trainPredict = model.predict(trainX)
trainPredict = pd.DataFrame(trainPredict)
trainY = pd.DataFrame(trainY)
yy = []
yy.append(trainY[0].values[-1:][0])
x = np.array([dataset[-1 * look_back:]])
# 预测未来n年
n = 10
for i in range(n):
        pred = model.predict(x)
        yy.append(pred[0][0])
        x = np.append(x[0], pred, axis=0)
        x = np.array([pd.DataFrame(x, columns=['rate']).values[-1 * look_back:]])

print("预测未来n年:", yy)
# 实际值与预测值比较图
plt.plot(trainY[0], color='blue', label='true')
plt.plot(trainPredict[0], color='red', label='pred')
plt.plot([x for x in range(len(trainY)-1, len(trainY) + n, 1)], yy, color='black', label='pred2')
plt.legend(loc='upper left')
plt.show()

# lstm评价
print("lstm:")
print("mse", mean_squared_error(trainY[0], trainPredict[0]))
print("mae", mean_absolute_error(trainY[0], trainPredict[0]))
print("r2_score", r2_score(trainY[0], trainPredict[0]))

把tensorflow. 去掉

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^