【Week-R2】使用LSTM實現火災預測(tf版本)

【Week-R2】使用LSTM實現火災預測(tf版本)

  • 一、 前期準備
    • 1.1 設置GPU
    • 1.2 導入數據
    • 1.3 數據可視化
  • 二、數據預處理(構建數據集)
    • 2.1 設置x、y
    • 2.2 歸一化
    • 2.3 劃分數據集
  • 三、模型創建、編譯、訓練、得到訓練結果
    • 3.1 構建模型
    • 3.2 編譯模型
    • 3.3 訓練模型
    • 3.4 模型評估
      • 3.4.1 Loss與Accuracy圖
      • 3.4.2 調用模型進行預測
      • 3.4.3 查看誤差
  • 四、其他
    • 4.1 模塊報錯:seaborn模塊導入錯誤
    • 4.2 圖片實時顯示比例不對
    • 4.3 什么是LSTM

  • 🍨 本文為🔗365天深度學習訓練營 中的學習記錄博客
  • 🍖 原作者:K同學啊 | 接輔導、項目定制

在這里插入圖片描述

一、 前期準備

語言環境:Python3.7.8
編譯器選擇:VSCode
深度學習環境:TensorFlow
數據集:本地數據集

1.1 設置GPU

本文使用CPU環境

'''
LSTM-實現火災預測
'''import tensorflow as tfgpus = tf.config.list_physical_devices("GPU")if gpus:gpu0 = gpus[0]tf.config.experimental.set_memory_growth(gpu0,true)tf.config.set_visible_devices([gpu0],"GPU")print("GPU: ",gpus)
else:print("CPU:")

輸出:
在這里插入圖片描述

1.2 導入數據

下載數據集文件woodpine2.csv到本地,使用絕對路徑進行訪問:

# 2.1 導入數據
import  pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as snsdf = pd.read_csv("D:\\jupyter notebook\\DL-100-days\\RNN\\woodpine2.csv")
print("df:", df)

輸出:
在這里插入圖片描述

1.3 數據可視化

# 3.數據可視化 
plt.rcParams['savefig.dpi'] = 500
plt.rcParams['figure.dpi'] = 500fig,ax = plt.subplots(1,3,constrained_layout = True , figsize = (14,3))
sns.lineplot(data=df["Tem1"],ax=ax[0])
sns.lineplot(data=df["CO 1"],ax=ax[1])
sns.lineplot(data=df["Soot 1"],ax=ax[2])
plt.savefig("D:\\jupyter notebook\\DL-100-days\\RNN\\3.數據可視化.png")
#plt.show()

輸出:
在這里插入圖片描述

二、數據預處理(構建數據集)

# 二、數據預處理(構建數據集)
dataFrame = df.iloc[:,1:]
print("dataFrame:", dataFrame)

輸出:
在這里插入圖片描述

2.1 設置x、y

# 1,設置x、y
# 需要實現:使用1-8時刻段預測9時刻段,則通過下述代碼做好長度的確定:
width_X = 8
width_y = 1X = []
y = []in_start = 0for _,_ in df.iterrows():in_end = in_start + width_Xout_end = in_end + width_yif out_end < len(dataFrame):X_ = np.array(dataFrame.iloc[in_start:in_end,])X_ = X_.reshape((len(X_)*3))y_ = np.array(dataFrame.iloc[in_end:out_end,0])X.append(X_)y.append(y_)in_start += 1X = np.array(X)
y = np.array(y)print(X.shape,y.shape)

輸出:
在這里插入圖片描述

2.2 歸一化

# 2,歸一化
from sklearn.preprocessing import MinMaxScalersc = MinMaxScaler(feature_range=(0,1))
X_scaled = sc.fit_transform(X)
print(X_scaled.shape)X_scaled = X_scaled.reshape(len(X_scaled),width_X,3)
print(X_scaled.shape)

輸出:
在這里插入圖片描述

2.3 劃分數據集

取5000之前的數據作為訓練集,5000之后的數據作為驗證集:

# 3,劃分數據集
# 取5000之前的數據作為訓練集,5000之后的數據作為驗證集:
X_train = np.array(X_scaled[:5000]).astype('float64')
y_train = np.array(y[:5000]).astype('float64')X_test = np.array(X_scaled[5000:]).astype('float64')
y_test = np.array(y[5000:]).astype('float64')print(X_train.shape)

輸出:
在這里插入圖片描述

三、模型創建、編譯、訓練、得到訓練結果

3.1 構建模型

通過下面代碼,構建一個包含兩個LSTM層和一個全連接層的LSTM模型。這個模型將接受形狀為(X_train.shape[1], 3)的輸入,其中X_train.shape[1]是時間步數,3 是每個時間步的特征數。

# 三、構建模型
import keras
from keras.models import Sequential
from keras.layers import Dense,LSTMmodel_lstm = Sequential()
model_lstm.add(LSTM(units=64,activation='relu',return_sequences=True,input_shape=(X_train.shape[1],3)))
model_lstm.add(LSTM(units=64,activation='relu'))
model_lstm.add(Dense(width_y))
# 通過上述代碼,構建了一個包含兩個LSTM層和一個全連接層的LSTM模型。這個模型將接受形狀為 (X_train.shape[1], 3) 的輸入,其中 X_train.shape[1] 是時間步數,3 是每個時間步的特征數。

輸出:
在這里插入圖片描述

3.2 編譯模型

# 四、 編譯模型 
model_lstm.compile(loss='mean_squared_error',optimizer=tf.keras.optimizers.Adam(1e-3))

3.3 訓練模型

history = model_lstm.fit(X_train,y_train,epochs = 40,batch_size = 64,validation_data=(X_test,y_test),validation_freq= 1)

訓練輸出:
在這里插入圖片描述

3.4 模型評估

3.4.1 Loss與Accuracy圖

# 六、 模型評估
# 1.Loss與Accuracy圖
import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = Falseplt.figure(figsize=(5, 3),dpi=120)plt.plot(history.history['loss'],label = 'LSTM Training Loss')
plt.plot(history.history['val_loss'],label = 'LSTM Validation Loss')plt.title('Training and Validation Accuracy')
plt.legend()
plt.savefig("D:\\jupyter notebook\\DL-100-days\\RNN\\1.Loss與Accuracy圖.png")
plt.show()

輸出:
在這里插入圖片描述

3.4.2 調用模型進行預測

# 2.調用模型進行預測
predicted_y_lstm = model_lstm.predict(X_test)y_tset_one = [i[0] for i in y_test]
predicted_y_lstm_one = [i[0] for i in predicted_y_lstm]plt.figure(figsize=(5,3),dpi=120)
plt.plot(y_tset_one[:1000],color = 'red', label = '真實值')
plt.plot(predicted_y_lstm_one[:1000],color = 'blue', label = '預測值')plt.title('Title')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.savefig("D:\\jupyter notebook\\DL-100-days\\RNN\\2.調用模型進行預測圖.png")
plt.show()

輸出:
在這里插入圖片描述

3.4.3 查看誤差


# 3. 查看誤差
from  sklearn import metricsRMSE_lstm = metrics.mean_squared_error(predicted_y_lstm,y_test)**0.5
R2_lstm = metrics.r2_score(predicted_y_lstm,y_test)print('均方根誤差:%.5f' % RMSE_lstm)
print('R2:%.5f' % R2_lstm)

輸出:
在這里插入圖片描述

四、其他

4.1 模塊報錯:seaborn模塊導入錯誤

解決方法如下:
在這里插入圖片描述
在這里插入圖片描述

4.2 圖片實時顯示比例不對

改為保存到本地查看:【在plt.show()之前保存
line 34:

plt.savefig("D:\\jupyter notebook\\DL-100-days\\RNN\\3.數據可視化.png")
plt.show()

line 125:

plt.savefig("D:\\jupyter notebook\\DL-100-days\\RNN\\1.Loss與Accuracy圖.png")
plt.show()

line 143:

plt.savefig("D:\\jupyter notebook\\DL-100-days\\RNN\\2.調用模型進行預測圖.png")
plt.show()

輸出:
在這里插入圖片描述

4.3 什么是LSTM

LSTM是一種特殊的RNN,能到學習到長期的依賴關系,可以理解為升級版的RNN。
在這里插入圖片描述
傳統的RNN在處理長序列時存在著“梯度爆炸(/梯度消失)”和“短時記憶”的問題,向RNN中加入遺忘門、輸入門及輸出門使得困擾RNN的問題得到了一定的解決;
在這里插入圖片描述
關于LSTM的實現流程:(1、單輸出時間步)單輸入單輸出、多輸入單輸出、多輸入多輸出(2、多輸出時間步)單輸入單輸出、多輸入單輸出、多輸入多輸出;
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/24127.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/24127.shtml
英文地址,請注明出處:http://en.pswp.cn/web/24127.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

超詳細的java Comparable,Comparator接口解析

前言 Hello大家好呀&#xff0c;在java中我們常常涉及到對象的比較&#xff0c;不同于基本數據類型&#xff0c;對于我們的自定義對象&#xff0c;需要我們自己去建立比較標準&#xff0c;例如我們自定義一個People類&#xff0c;這個類有name和age兩個屬性&#xff0c;那么問…

[數據集][圖像分類]蘑菇分類數據集3122張215類別

數據集類型&#xff1a;圖像分類用&#xff0c;不可用于目標檢測無標注文件 數據集格式&#xff1a;僅僅包含jpg圖片&#xff0c;每個類別文件夾下面存放著對應圖片 圖片數量(jpg文件個數)&#xff1a;3122 分類類別數&#xff1a;215 類別名稱:[“almond_mushroom”,“amanita…

實驗筆記之——DPVO(Deep Patch Visual Odometry)

本博文記錄本文測試DPVO的過程&#xff0c;本博文僅供本人學習記錄用~ 《Deep Patch Visual Odometry》 代碼鏈接&#xff1a;GitHub - princeton-vl/DPVO: Deep Patch Visual Odometry 目錄 配置過程 測試記錄 參考資料 配置過程 首先下載代碼以及創建conda環境 git clo…

Data Management Controls

Data Browsing and Analysis Data Grid 以標準表格或其他視圖格式&#xff08;例如&#xff0c;帶狀網格、卡片、瓷磚&#xff09;顯示數據。Vertical Grid 以表格形式顯示數據&#xff0c;數據字段顯示為行&#xff0c;記錄顯示為列。Pivot Grid 模擬微軟Excel的樞軸表功…

有待挖掘的金礦:大模型的幻覺之境

人工智能正在迅速變得無處不在&#xff0c;在科學和學術研究中&#xff0c;自回歸的大型語言模型&#xff08;LLM&#xff09;走在了前列。自從LLM的概念被整合到自然語言處理&#xff08;NLP&#xff09;的討論中以來&#xff0c;LLM中的幻覺現象一直被廣泛視為一個顯著的社會…

Oracle EBS AP發票創建會計科目提示:APP-SQLAP-10710:無法聯機創建會計分錄

系統版本 RDBMS : 12.1.0.2.0 Oracle Applications : 12.2.6 問題癥狀: 提交“創建會計科目”請求提示錯誤信息如下: APP-SQLAP-10710:無法聯機創建會計分錄。 請提交應付款管理系統會計流程,而不要為此事務處理創建會計分錄解決方法 數據修復SQL腳本: UPDATE ap_invoi…

LabVIEW閥性能試驗臺測控系統

本項目開發的閥性能試驗臺測控系統是為滿足國家和企業相關標準而設計的&#xff0c;主要用于汽車氣壓制動系統控制裝置和調節裝置等產品的綜合性能測試。系統采用工控機控制&#xff0c;配置電器控制柜&#xff0c;實現運動控制、開關量控制及傳感器信號采集&#xff0c;具備數…

vue封裝一個查詢URL參數方法

vue封裝一個查詢URL參數方法 在 Vue 中&#xff0c;你可以封裝一個查詢 URL 參數的方法來獲取 URL 中的查詢參數。以下是一個示例代碼&#xff1a; export const getQueryParam (param) > {const urlParams new URLSearchParams(window.location.search);return urlPara…

算法-分治策略

概念 分治算法&#xff08;Divide and Conquer&#xff09;是一種解決問題的策略&#xff0c;它將一個問題分解成若干個規模較小的相同問題&#xff0c;然后遞歸地解決這些子問題&#xff0c;最后合并子問題的解得到原問題的解。分治算法的基本思想是將復雜問題分解成若干個較…

東方博宜1565 - 成績(score)

問題描述 牛牛最近學習了 C 入門課程&#xff0c;這門課程的總成績計算方法是&#xff1a; 總成績作業成績 20% 小測成績 30% 期末考試成績 50%。 牛牛想知道&#xff0c;這門課程自己最終能得到多少分。 輸入 三個非負整數 A、B、C &#xff0c;分別表示牛牛的作業成績、…

計算機網絡 期末復習(謝希仁版本)第3章

對于點對點的鏈路&#xff0c;目前使用得最廣泛的數據鏈路層協議是點對點協議 PPP (Point-to-Point Protocol)。局域網的傳輸媒體&#xff0c;包括有線傳輸媒體和無線傳輸媒體兩個大類&#xff0c;那么有線傳輸媒體有同軸電纜、雙絞線和光纖&#xff1b;無線傳輸媒體有微波、紅…

計算引擎:Flink核心概念

Apache Flink 是一個流處理框架,擅長處理實時數據流和批處理任務。Flink 提供了強大的功能來處理和分析大量數據。以下是 Flink 的核心概念: 1. DataStream 和 DataSet API DataStream API: 用于處理無界數據流,即不斷生成和流動的數據。例如,傳感器數據、日志等。DataSet…

基于Texture2D 實現Unity 截屏功能

實現 截屏 Texture2D texture new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false); texture.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0); texture.Apply(); 存儲 byte[] array ImageConversion.EncodeToPNG(texture); if (!…

分享萬能點擊器免費版,吾愛大佬出品,這個太贊了!

小伙伴們&#xff01;阿星又來給大家推薦神奇的小軟件啦&#xff01;這次的主角可是個神器——鼠標連點器&#xff01;你聽過沒&#xff1f;這玩意兒簡直是個“自動小助手”&#xff0c;讓你的鼠標在屏幕上飛舞&#xff0c;點得飛快&#xff0c;解放你的雙手&#xff0c;讓你網…

【ARM 常見匯編指令學習 6.2 -- ARMv8 匯編指令 SDIV 詳細介紹】

文章目錄 SDIV指令格式使用示例注意事項總結 SDIV ARMv8 架構中的 SDIV 指令用于執行帶符號整數除法操作。這意味著它可以處理負數除法&#xff0c;與 UDIV&#xff08;執行無符號整數除法&#xff09;形成對比。SDIV 將兩個寄存器中的帶符號整數相除&#xff0c;將除法結果存…

react學習-組件傳值

1.props傳值 主要步驟&#xff1a; 在父組件中引用子組件時&#xff0c;在子組件上面寫入name1{name2}格式進行傳值&#xff0c;name1為子組件中對應的用于接收數據的字段名稱&#xff0c;name2為父組件中需要傳遞到子組件中的值&#xff08;state中聲明的數據&#xff09;&…

一篇文章帶你搞懂C++引用(建議收藏)

引用 6.1 引用概念 引用不是新定義一個變量&#xff0c;而是給已存在變量取了一個別名&#xff0c;編譯器不會為引用變量開辟內存空間&#xff0c;它和它引用的變量共用同一塊內存空間。 比如&#xff1a;李逵&#xff0c;在家稱為"鐵牛"&#xff0c;江湖上人稱&quo…

Linux.軟件操作

1.yum 命令 要連網 2.systemctl 命令控制軟件的啟動和關閉 3.ln 創建軟連接 使用cat來找本體&#xff0c;看看鏈接生不生效 4.date 命令查看系統時間 格式化的時候可以用雙引號把他們引出來 -d 對時間進行修改 修改時區 自動校準 手動校準 5.ifconfig 查看本機的ip地址 6.h…

mysql undolog管理

在MySQL中&#xff0c;Undo Log&#xff08;撤銷日志&#xff09;用于支持事務的回滾和MVCC&#xff08;多版本并發控制&#xff09;。為了避免Undo Log不斷增長&#xff0c;影響系統性能&#xff0c;需要進行合理的清理。MySQL的Undo Log清理策略主要依賴于系統的配置參數和后…

Ansible——get_url模塊

目錄 主要用途 參數總結 基本語法示例 使用示例 示例1&#xff1a;下載文件 示例2&#xff1a;使用校驗和驗證文件 示例3&#xff1a;使用 HTTP 基本認證 示例4&#xff1a;通過代理服務器下載文件 示例5&#xff1a;設置文件權限、所有者和組 示例6&#xff1a;強制…