博客專欄

        EEPW首頁 > 博客 > LTSM 實現多元素時序數據植物健康預測

        LTSM 實現多元素時序數據植物健康預測

        發布人:AI科技大本營 時間:2021-12-15 來源:工程師 發布文章

        引言:

        近些年來,“預測”一詞在各個領域被頻繁提及,所謂預測,實際上就是根據歷史規律,推測未來結果。在科學技術發展有限的過去,預測主要是利用經驗去推測未來,隨著社會的發展,對預測的客觀性和準確性提出了更高的要求,簡單的經驗推理已無法滿足社會的需求。近幾十年來,隨著人工智能技術的發展,出現了新型的預測方法,人工神經網絡預測技術正是其中佼佼者。人工神經網絡預測技術一經面世就展現了它相比傳統預測方法的優勢:精度高、速度快,隨著人工神經網絡預測技術研究的深入,逐漸發展出性能更優的復雜網絡,如 BP、CP 和 ART 網絡等。

        目前最常用的是 BP 神經網絡,由于它結構簡單、易于使用,被廣泛應用于天氣預報、證券投資市場等領域。但是由于 BP 神經網絡不能很好的解決時間序列問題,為此發展出了循環神經網絡(RNN),但是經過使用發現 RNN 容易出現“梯度消失”和“梯度爆炸”問題,為了解決這類問題,基于人腦的遺忘機制,Sepp Hochreiter 提出了 LSTM 神經網絡。

        LSTM 繼承了大部分 RNN 的優點,同時解決了“梯度消失”和“梯度爆炸”問題,它更真實地表征或模擬了人類行為、邏輯發展和神經組織的認知過程。LSTM 非常適合處理與時間序列高度相關的問題,在長周期時間依賴問題上的潛力無窮。得益于 LSTM 的各類優點,應用 LSTM 模型對具有時序性的事物進行預測具有實際意義。

        故今天我們將使用keras搭建LSTM實現多元參數進行時序數據的預測,應用于農業健康狀況預測,模型200輪擬合效果如下: 

        1.png

        01 LSTM 算法介紹

        長短期記憶(LSTM)神經網絡是在循環神經網絡(RNN)的基礎上添加各種“門”控制,實現對數據的記憶功能,以此來解決長時間依賴問題。LSTM 也被稱作特殊的 RNN,現在被廣泛的使用在文本生成、語音識別、時間序列預測等方面。2014 年以來,LSTM 已經成為非常熱點的研究模型,得到大量的關注和研究。國內外學者利用 LSTM 模型進行預測應用研究已經取得了一系列的成果,Alahi等人提出了一種可以學習人類運動并預測未來軌跡的 LSTM 模型,將此模型應用于公共數據集上,預測結果優于當時最先進的方法;Ma等人首次將 LSTM 模型運用于交通預測中,為了驗證 LSTM 神經網絡的有效性,基于北京市兩個微波探測器采集的數據進行試驗,通過與傳統的 RNN 模型比較,發現 LSTM 神經網絡在預測精度和穩定性方面都達到了最好的效果;Zhang等人基于 LSTM 提出了一種改進的時間特征提取算法,簡稱 Read-first LSTM 或RLSTM,作者將該模型應用于空氣污染物預測上,實驗表明該模型預測效果良好;陳卓等人提出一種基于 LSTM 的電力負荷預測方法,使用這該方法對某地電力負荷值進行預測,將預測結果與傳統模型對比,最終證明 LSTM 模型的誤差更低,預測效果更好;王旭東等人針對短期家庭電力數據隨機性強,數據維度低等問題,提出了一種基于 LSTM 的單變量短期家庭電力需求預測模型,實驗表明該模型能夠準確地預測家庭電力需求趨勢,且優于傳統的循環神經網絡。

        1.1 LSTM原理

        LSTM 可以根據時間序列對輸入的信息進行分析。換句話說,我們利用前饋神經網絡時,它會認為當前時刻輸入的信息與下一時刻輸入的內容沒有關系;在利用RNN 神經網絡時,因為 RNN 存在著梯度消失、梯度爆炸和無法有效處理長周期數據依賴問題的特點,所以前輩們提出新的算法—LSTM 算法。使用 LSTM 可以有目的地傳遞和表達長時間序列中的內容并且避免引起歷史信息的丟失。

        與 RNN 比較,LSTM 多了三個門,它利用三個門對保留的信息進行控制,確保保留的信息是算法需要的,對于垃圾信息則拒之門外。這三個門分別是輸入門、遺忘門、輸出門。三個門作用不同,相互合作,達到最佳效果。

        2.png

        02 植物健康狀況預測

        農業是我國國民經濟的重要支柱,傳統的農業由于降雨和氣候等因素的制約,會對其產量和品質造成一定的影響,減少了農業產業的經濟利益。為實現經濟利益最大化,提高農作物產量,發展智能化農業等問題,需從本質上解決,即對作物的生理信息的傳輸進行研究。而作為智能農業的未來發展,其必然需要數據預測的部分,故本項目將針對農業農作物影響參數溫度、濕度等因素的歷史數據進行未來狀況的預測。

        這里程序的設計分為以下幾個步驟,分別為數據集預處理、LSTM模型訓練和模型測試。

        2.1 農作物歷史數據預處理

        這里我們將系統記錄的農作物歷史影響因素的數值轉為csv文件,并將其轉為英文,防止中文亂碼的發生。

        3.png

        通過read_csv函數讀取csv文件后,獲取其中每列數據作為每個元素。然后對讀取的數據進行MinmaxScaler標準化,目的是為了加速模型的收斂,同時還有可能提高模型精度。然后把數據轉為監督學習數據。代碼如下:

        dataset = read_csv('sate.csv', header=0, index_col=0)
        values = dataset.values
        encoder = LabelEncoder()
        values = values.astype('float32')
        scaler = MinMaxScaler(feature_range=(0, 1))
        scaled = scaler.fit_transform(values)
        reframed = series_to_supervised(scaled, 1, 1)
        print(scaled.shape)
        values = reframed.values
        n_train_hours = 365 * 24
        train = values[:n_train_hours, :]
        test = values[n_train_hours:, :]
        train_X, train_y = train[:, :-1], train[:, -1]
        test_X, test_y = test[:, :-1], test[:, -1]
        train_X = train_X.reshape((train_X.shape[0], 1, train_X.shape[1]))
        test_X = test_X.reshape((test_X.shape[0], 1, test_X.shape[1]))
        def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
            n_vars = 1 if type(data) is list else data.shape[1]
            df = DataFrame(data)
            cols, names = list(), list()
            for i in range(n_in, 0, -1):
                cols.append(df.shift(i))
                names += [('var%d(t-%d)' % (j+1, i)) for j in range(n_vars)]
            for i in range(0, n_out):
                cols.append(df.shift(-i))
                if i == 0:
                    names += [('var%d(t)' % (j+1)) for j in range(n_vars)]
                else:
                    names += [('var%d(t+%d)' % (j+1, i)) for j in range(n_vars)]
            agg = concat(cols, axis=1)
            agg.columns = names
            if dropnan:
                agg=agg.fillna(0)
            return agg

        4.png

        2.2 LSTM模型訓練

        這里設置LSTM層神經元50,設置損失為MAE平均絕對誤差,優化器為adam優化器,迭代次數為200輪,batch_size為72,隨機打亂數據進行訓練,并最后進行模型的保存,并將其損失圖繪制。代碼如下:

        model = Sequential()
        model.add(LSTM(50, input_shape=(train_X.shape[1], train_X.shape[2])))
        model.add(Dense(1))
        model.compile(los='mae', optimizer='adam')
        history = model.fit(train_X, train_y, epochs=200, batch_size=72, validation_data=(train_X, train_y), verbose=2, shuffle=False)
        pyplot.plot(history.history['loss'], label='train')
        pyplot.plot(history.history['val_loss'], label='test')
        pyplot.legend()
        pyplot.show()

        model.save("model.h5")

        5.png

        2.3 模型測試

        從設置的農業系統中獲取環境參數后,將參數輸入模型,即可實現預測。代碼如下:

        while True:
            elements=['health','temperature','humidity','light_intensity','soil_temperature','soil_humidity','co2','rain']
            i=0
            if i%1==0:
                input_list=spider()
                input_data = DataFrame([input_list], columns=elements)
            dataset=dataset.append(input_data)
            values = dataset.values
            encoder = LabelEncoder()
            values = values.astype('float32')
            scaler = MinMaxScaler(feature_range=(0, 1))
            scaled = scaler.fit_transform(values)
            reframed = series_to_supervised(scaled, 1, 1)
            values = reframed.values
            test_X= values[:, :-1]
            test_X = test_X.reshape((test_X.shape[0], 1, test_X.shape[1]))
            y_predict = model.predict(np.array([test_X[-1]]))
            print(input_data.values[0][1:])
            print("預測污染程度為:"+str(y_predict[0][0]))

        6.png

        完整代碼:

        鏈接:

        https://pan.baidu.com/s/1tpT0_K-csVX8fRYd-PPJCg

        提取碼:1rb8

        李秋鍵,CSDN博客專家,CSDN達人課作者。碩士在讀于中國礦業大學,開發有taptap競賽獲獎等。

        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。

        汽車防盜機相關文章:汽車防盜機原理


        關鍵詞: AI

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 长沙市| 台北市| 大关县| 华容县| 三门峡市| 洪洞县| 张家界市| 裕民县| 绥化市| 东兰县| 循化| 高唐县| 清镇市| 滦南县| 乌拉特中旗| 肥城市| 土默特右旗| 扬州市| 新沂市| 兰州市| 平乐县| 普定县| 茌平县| 卢龙县| 茶陵县| 濮阳县| 阿拉善盟| 拜城县| 政和县| 富顺县| 三河市| 伊宁市| 德安县| 阿克陶县| 平顶山市| 中江县| 岗巴县| 墨江| 保德县| 繁峙县| 尉氏县|