【问题标题】:Error when checking input: expected lstm_132_input to have 3 dimensions, but got array with shape (23, 1, 3, 1)检查输入时出错:预期 lstm_132_input 有 3 个维度,但得到了形状为 (23, 1, 3, 1) 的数组
【发布时间】:2019-11-11 21:54:00
【问题描述】:

我有一个包含温度、湿度和风的数据集。在这里,我想预测下一小时的未来温度值。

我使用 LSTM 来预测未来的温度值。 但是当我运行模型时,它显示了这个错误Error when checking input: expected lstm_132_input to have 3 dimensions, but got array with shape (23, 1, 3, 1)

谁能帮我解决这个问题?

这是我的代码:

    import datetime
    import time
    from sklearn.metrics import mean_squared_error
    import matplotlib.pyplot as plt 
    from matplotlib.dates import DateFormatter
    import numpy as np
    import pandas as pd 
    from sklearn.preprocessing import MinMaxScaler

    from sklearn import preprocessing
    from keras.layers.core import Dense, Dropout, Activation
    from keras.activations import linear
    from keras.layers.recurrent import LSTM
    from keras.models import Sequential
    from sklearn.preprocessing import MinMaxScaler


    data = pd.read_csv('data6.csv' , sep=',')
    data['date'] = pd.to_datetime(data['date'] + " " + data['time'], format='%m/%d/%Y %H:%M:%S')
    data.set_index('time', inplace=True)
    data = data.values
    data = data.astype('float32')
    # normalize the dataset
    def create_data(train,X,n_out=1):
    #data = np.reshape(train, (train.shape[0], train_shape[1], train_shape[2]))
    x,y=list(),list()
    start =0
    for _ in range(len(data)):
        in_end = start+X
        out_end= in_end + n_out
        if out_end < len(data):
            x_input = data[start:in_end]
            x.append(x_input)
            y.append(data[in_end:out_end,0])
        start +=1
    return np.array(x),np.array(y)
    scaler = MinMaxScaler()
    data = scaler.fit_transform(data)
    # split into train and test sets
    train = int(len(data) * 0.6)
    test = len(data) - train
    train, test = data[0:train,:], data[train:len(data),:]
    X=1
    x_train, y_train = create_data(train,X)
    x_test, y_test = create_data(test,X)
    x_train=x_train.reshape(x_train.shape +(1,))
    x_test=x_test.reshape(x_test.shape + (1,))


    n_timesteps, n_features, n_outputs = x_train.shape[1], x_train.shape[2], x_train.shape[1]


    model = Sequential()
    model.add(LSTM(8, activation='relu', input_shape=(n_timesteps, n_features)))
    model.add(Dense(8,activation='relu'))
    model.add(Dense(n_outputs))
    model.compile(loss='mse', optimizer='adam')
    # fit network
    model.fit(x_train,y_train, epochs=10,batch_size=1, verbose=0)

我的 csv 文件:

My csv file.

我的错误:

模型总结:

【问题讨论】:

    标签: python-3.x pandas time deep-learning lstm


    【解决方案1】:

    你需要在最后一层添加激活

        model = Sequential()
    model.add(LSTM(8, activation='relu', input_shape=(n_timesteps, n_features)))
    model.add(Dense(8,activation='relu'))
    # here
    model.add(Dense(n_outputs,activation='relu'))
    model.compile(loss='mse', optimizer='adam')
    # fit network
    model.fit(x_train,y_train, epochs=10,batch_size=1, verbose=0)
    

    【讨论】:

    • 感谢您回复我。但是根据您的方法更改代码时仍然显示相同的错误
    • 你能分享一下 model.summary() 结果吗!和 print(n_outputs)
    • @Guissous Allaeddine print(n_output) = 1 并且在运行模型 sumarry 时,由于此错误而没有运行
    • 我在这里又试了一次,我得到了model.summary,然后我粘贴了模型摘要的图像
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 2020-07-27
    • 2019-02-25
    • 2020-06-09
    • 2019-05-04
    • 2021-12-19
    • 1970-01-01
    相关资源
    最近更新 更多