勾志竟,宮志宏,劉布春
(1.天津市氣象信息中心,天津 300074;2.天津市氣候中心,天津 300074;3.中國農業科學院農業環境與可持續發展研究所,北京 100081)
水稻是中國最主要的糧食作物之一,其產量的預測對于農業政策調整和保障糧食安全問題具有重要的意義[1]。由于其受多種因素影響,水稻產量的準確預測較為困難。常規的產量預測主要包括基于統計回歸原理預測、灰色理論生長模擬[2]、衛星遙感預測[3]等方法,這些方法簡便易行,可以預測產量。然而,水稻產量與多種因素之間存在著復雜的非線性關系,傳統的方法預測精度往往不高,隨著基于人工智能方法的不斷研究和優化[4-5],BP神經網絡因其適用于分析產量與影響產量的眾多因素之間的復雜非線性關系,在產量預測方面得到較為廣泛的應用[6]。
張成才等[7]采用播種面積、農田有效灌溉面積、農用機械總動力、化肥施用量、農藥施用量等指標建立了BP神經網絡糧食產量預測模型;姜新等[8]基于作物參數和農機水平建立了神經網絡產量預測模型;郭亞菲等[9]提出了基于主成分分析和粒子群優化神經網絡的糧食產量預測模型。但是這些模型對水稻產量的長期變化趨勢預測能力偏弱,同時未能充分考慮生長期的氣象要素對產量的影響。
而長短期記憶網絡(long-short term memory,LSTM)作為一種改進的時間循環神經網絡,在長時間序列預測問題處理中有獨特的優勢,在機器翻譯、語音識別等方面已經有很多應用[10-11],但目前鮮有在水稻產量預測中的應用。因此,該文擬基于TensorFlow深度學習框架,構建LSTM水稻產量預測方法,以水稻不同生長期的氣象要素作為預測因子對水稻產量進行預測,并將預測結果與BP神經網絡預測模型進行比較,由此探討LSTM在水稻產量長期趨勢預測中的優越性,以期可為水稻產量長期趨勢預測提供一種新方法。
天津市寧河區位于39°21′N,117°49′,屬于大陸性季風氣候,暖溫帶半干旱半濕潤風帶,年均降水量為500 mm ~700 mm,降水量70%集中在6-8月份,地貌屬于海積、沖積平原,土壤含鹽分較高[12]。天津寧河區“小站稻”既有食味特性,又有良好的耐鹽堿特性[13],一般在4月上旬播種,5月底至6月上旬移栽,6月中下旬進入返青期,8月上旬進入孕穗期,9月上旬進入乳熟期,9月下旬至10月中旬成熟。
水稻產量數據和生育期地面氣象觀測資料來自天津市氣象信息中心,水稻產量數據為寧河區單位面積(每畝)水稻產量(kg),生育期包括移栽-返青期(周期1)、分蘗期(周期2)、孕穗期(周期3)、抽穗期(周期4)、成熟期(周期5)。
地面氣象觀測資料來自天津市寧河區氣象觀測站,包括1989-2015年逐日平均風速、最大風速、日照時數、最高溫、最低溫、平均相對濕度、最小相對濕度及降水量。
LSTM神經網絡最早是由Hochreiter等[14]提出,是一種改進的RNN算法,增加了忘記門,可以學習時間序列長短依賴信息,能夠克服梯度消失的問題,主要由忘記門、輸入門、候選門和輸出門組成,其基本結構如圖1所示。

圖1 LSTM內部結構
忘記門(forget gate layer)控制著應該忘記哪些信息,其計算公式如下所示:
ft=σ(Wf[ht-1,xt]+bf)
(1)
其中,Wf為忘記門權重,ht-1為上一個單元的輸出,xt為當前單元的輸入,bf為偏置,σ為sigmod函數。
輸入門(input gate layer)通過激活函數決定著當前時刻的輸入信息xt,有多少信息被加到信息流里面,其計算公式如下所示:
it=σ(Wi[ht-1,xt]+bi)
(2)
gt=σ(Wg[ht-1,xt]+bg)
(3)
其中,Wi、Wg為權重,bi、bg為偏置。
候選門(candidate layer)用來計算當前的輸入和過去的記憶所具有的信息的總和,其計算公式如下所示:
Ot=σ(Wo[ht-1,xt]+bo)
(4)
ht=ot*tanh(St)
(5)
輸出門(output gate layer)控制著有多少記憶信息被用于下一階段的更新中,其計算公式如下所示:
St=ft*St-1+gt*it
(6)
本研究采用LSTM算法實現水稻產量預測模型,模型輸入為天津市寧河區水稻5個生長周期的氣象要素觀測數據,即移栽-返青期平均風速、移栽-返青期最大風速、移栽-返青期平均風速日照時數、移栽-返青期最高溫等,模型輸出為天津市寧河區單位面積的水稻產量。
本研究采用均方根誤差和平均絕對誤差來評價預測模型的優劣程度。
(1)均方根誤差(root mean square error,RMSE)。
(7)
(2)平均絕對誤差(mean absolute error,MAE)。
(8)

寧河區1989-2015年的水稻單產趨勢如圖2所示,可以看出寧河區1993年水稻單產明顯低于往年(按缺測處理),2010年之前整體波動不大,2012年水稻單產最高,2014年和2015年相比也出現了較大程度的減產。

圖2 寧河區1989-2015年水稻單產變化趨勢
為了消除原始氣象要素數據量綱不同所帶來的不利,通常的做法是歸一化處理,將各氣象要素數據轉換到[0,1]之間歸一化公式如下:
(9)
其中,xi為輸入數據,i為數據序號,xmax、xmin為x中的最大值和最小值。
本研究主要考慮天津市寧河區水稻5個生長周期的氣象要素對水稻產量的影響,通過對1989-2015年寧河區氣象要素觀測數據進行統計分析,得到如下結論:
經分析,1989-2015年寧河區水稻移栽-返青期平均風速、最大風速、平均氣溫、最高氣溫幾乎無變化,日照總時數減少,最低氣溫降低,最小相對濕度和平均相對濕度變小,降雨量減少。
分蘗期平均風速變大,最大風速減小,日照總時數增多,平均氣溫、最低氣溫、降雨量幾乎無變化,最高氣溫升高,最小相對濕度、平均相對濕度變小。
孕穗期平均風速、最大風速變大,日照總時數減少,平均氣溫、最高氣溫、最低氣溫升高,最小相對濕度幾乎無變化,平均相對濕度變小。
抽穗期平均風速變大,最大風速幾乎無變化,日照總時數減少,平均氣溫、最高氣溫、最低氣溫降低,最小相對濕度、平均相對濕度變小,降雨量減少。
成熟期平均風速、最大風速變大,日照總時數減少,平均氣溫、最高氣溫、最低氣溫升高,最小相對濕度、平均相對濕度變小,降雨量幾乎無變化。
預測因子的選擇很大程度上影響了預測的結果,該文利用Pearson相關系數法[15]來考察各氣象要素對水稻產量的影響力,公式如下:
(10)
其中,x與y分別為2個變量的觀測值。
若r>0,表示2個變量是正相關的;若r<0,則表示2個變量是負相關的,n為樣本數量(文中為26)。
各生長周期各要素與水稻產量相關性系數如表1所示,其中,X1、X2、X3、X4、X5、X6、X7、X8、X9分別表示平均風速、最大風速、日照總時數、平均溫度、最高溫、最低溫、平均相對濕度、最小相對濕度及總降水量。
表1 各生長周期各要素與水稻產量相關性系數

變量移栽-返青期分蘗期孕穗期抽穗期成熟期X1-0.139-0.109-0.338-0.341-0.439X2-0.239-0.266-0.191-0.388-0.496X30.1040.0940.034-0.1130.29X4-0.237-0.0690.2780.0920.103X5-0.046-0.1170.2410.0380.052X6-0.2720.1320.350.1160.148X7-0.0970.2050.320.0610.087X8-0.2250.2630.2230.0180.032X9-0.2460.4440.1870.0440.241

(11)
最后經過顯著性檢驗,如公式(11)所示,并結合農業氣象專家的建議,選取移栽-返青期最大風速、移栽-返青期平均溫度、移栽-返青期最低溫、移栽-返青期最小相對濕度、移栽-返青期總降水量、分蘗期最大風速、分蘗期平均相對濕度、分蘗期最小相對濕度、分蘗期總降水量、孕穗期平均風速、孕穗期平均溫度、孕穗期最高溫、孕穗期最低溫、孕穗期平均相對濕度、孕穗期最小相對濕度、抽穗期平均風速、抽穗期最大風速、成熟期平均風速、成熟期最大風速、成熟期日照總時數、成熟期總降水量這21個要素作為水稻產量的預測因子。
TensorFlow是谷歌的開源機器學習算法框架[16],其應用場景非常廣泛,包括語音識別、自然語言處理、計算機視覺、數據分析及預測等[17],它支持Python、C++等多種編程語言,計算模型采用有向圖(directed graph),其中每個運算操作(operation)作為一個節點(node),節點間的連接為邊(edge)。
本研究采用Anaconda在Windows操作系統下安裝CPU版本的TensorFlow,Anaconda提供了Python的包管理和環境管理功能。
TensorFlow的具體安裝步驟如下:
(1)到Anaconda官網上下載電腦系統對應版本的Anaconda并安裝。
(2)創建運行環境,安裝Python3.6.10,命令如下:
conda create --name tensorflow python=3.6.10
(3)激活TensorFlow環境,命令如下:
activate tensorflow
(4)安裝TensorFlow,命令如下:
pip install tensorflow
(5)啟動Anaconda,并安裝Spyder。
實驗采用Python語言和TensorFlow庫實現LSTM預測模型,如圖3所示。

圖3 LSTM水稻產量預測模型
(1)輸入層:以天津市寧河區水稻生長周期的21個氣象要素作為訓練數據,水稻單產數據作為目標數據,對原始氣象要素和水稻產量數據進行預處理,得到逐年的時間序列數據集,并將數據集劃分為訓練集Tran_data和測試集Test_data,采用公式(9)對訓練集和測試集進行標準化處理。
訓練數據和目標數據實現如下:
X=tf.placeholder(tf.float32,[None,time_step,input_size])
Y=tf.placeholder(tf.float32,[None,time_step,output_size])
其中,X為訓練數據,Y為目標數據。
(2)隱藏層:將輸入層處理后的數據傳入隱藏層,計算相對損失,對LSTM算法隱藏層參數layer_num、rnn_unit、weights、biases進行優化,將最終結果輸出。
其中,layer_num為隱藏層數量,rnn_unit為隱藏層單元數。輸入層和輸出層的權重為weights,偏置為biases。
輸入層和輸出層權重、偏置及誤差實現如下:
weights={'in':tf.Variable(tf.random.normal([input_size,rnn_unit])),'out':tf.Variable(tf.random.normal([rnn_unit,1]}
biases={'in':tf.Variable(tf.constant(0.1,shape=[rnn_unit,])),'out':tf.Variable(tf.constant(0.1,shape=[1,]))}
loss=tf.reduce_mean(tf.square(tf.reshape(pred,[-1])-tf.reshape(Y, [-1])))
(3)輸出層:通過隱藏層的輸出計算得到均方根誤差和平均絕對誤差,本研究網絡單元采用tf..nn.rnn_cell. BasicLSTMCell,默認激活函數為tanh。
(4)優化:神經網絡最常用的優化方法多為基于梯度的,本研究針對傳統神經網絡梯度下降問題采用自適應距估計優化器(Adam),該算法將Momentum和RMSprop融合在一起,能夠根據參數調節相應的學習率,并且內存占用較少。同時,本研究采用Dropout方法防止網絡在訓練過程中出現過擬合問題。
Adam優化器和Dropout方法實現如下:
train_op=tf.AdamOptimizer(lr).minimize(loss)
cell=tf.nn.rnn_cell.DropoutWrapper(cell,output_keep_prob=keep_prob)
(5)預測:通過saver.restore(sess,module_file)將保存的訓練好的最優模型參數恢復,輸入新的預測因子,即可預測水稻產量。
文中基于TensorFlow構建了LSTM長短時記憶網絡,并通過與傳統的BP神經網絡進行對比實驗,驗證基于TensorFlow構建的深度學習模型的優越性。網絡參數及調優方法參考文獻[18-19],通過多次實驗對模型進行調優得到BP神經網絡和LSTM長短時記憶網絡的參數,如表2所示。

表2 BP神經網絡和LSTM參數
從表2可以看出,BP神經網絡的網絡結構為21-q-l,其中21為輸入層的節點數目,q為隱含層數目,采用經驗公式q=2*d+1,d為輸入層節點數目,l為輸出層節點數目,即水稻單位面積產量,學習率設為0.005,迭代次數設為1 000,誤差精度設為0.005 1。LSTM長短期記憶網絡的輸入層節點數為21,輸出層節點數為1,隱藏層數設為3、隱藏層節點數為100,學習率為0.000 6,迭代次數為300。
實驗結果如圖4所示。可以看出,2014年相比2013年產量有減小的趨勢,BP神經網絡沒有擬合出來。相比BP神經網絡,LSTM長短期記憶網絡通過門單元(gate)可以更好地學習到長時間序列數據的細節,進而更好地預測出未來的單位面積水稻產量的發展趨勢。

圖4 BP神經網絡與LSTM預測結果對比
兩種方法的預測結果如表3所示。

表3 BP神經網絡和LSTM產量預測結果
從表3可以看出,除了2014年,LSTM長短時記憶網絡對2010-2015年的寧河區小站稻畝產量預測精度都比BP神經網絡要高。
其中,BP神經網絡預測結果的RMSE為75.12,MAE為65.64。LSTM長短期記憶網絡預測結果的RMSE為34.77,MAE為33.37,相比BP神經網絡RMSE和MAE都有明顯的下降,RMSE降低了53.7%,MAE降低了49.2%,預測精度更高。
該文利用水稻產量的時間序列數據進行預測,基于TensorFlow深度學習框架構建了LSTM水稻產量預測方法,采用1989-2015年天津市寧河區地面氣象觀測資料與產量數據,選取水稻不同生長期的氣象要素作為預測因子,對水稻單產進行預測。結果表明,BP神經網絡由于過擬合問題,預測效果不佳,LSTM長短期記憶網絡的預測精度較高,可以更好地預測未來的糧食產量的長期發展趨勢,可為水稻產量預測提供新的參考思路。水稻產量受經濟和自然條件等多種因素影響,準確的預測往往十分困難,文中的方法僅考慮了氣象要素對產量的影響,未來可以綜合考慮社會經濟因素及生產投入、品種等因素做進一步的產量預測研究。