深度學習項目--基于LSTM的火災預測研究(pytorch實現)

  • 🍨 本文為🔗365天深度學習訓練營 中的學習記錄博客
  • 🍖 原作者:K同學啊

前言

  • LSTM模型一直是一個很經典的模型,這個模型當然也很復雜,一般需要先學習RNN、GRU模型之后再學,GRU、LSTM的模型講解將在這兩天發布更新,其中:
    • 深度學習基礎–一文搞懂RNN
    • 深度學習基礎–GRU學習筆記(李沐《動手學習深度學習》)
  • 這一篇:是基于LSTM模型火災預測研究,講述了如何構建時間數據、模型如何構建、pytorch中LSTM的API、動態調整學習率等=,最后用RMSE、R2做評估
  • 歡迎收藏 + 關注,本人將會持續更新

文章目錄

    • 1、導入數據與數據展示
      • 1、導入庫
      • 2、導入數據
      • 3、數據可視化
      • 4、相關性分析(熱力圖展示)
      • 5、特征提取
    • 2、時間數據構建
      • 1、數據標準化
      • 2、構建時間數據集
      • 3、劃分數據集和加載數據集
      • 1、數據劃分
    • 3、模型構建
    • 4、模型訓練
      • 1、訓練集函數
      • 2、測試集函數
      • 3、模型訓練
    • 5、結果展示
      • 1、損失函數
      • 2、預測展示
      • 3、R2評估

1、導入數據與數據展示

1、導入庫

import torch  
import torch.nn as nn 
import pandas as pd 
import numpy as np 
import seaborn as sns 
import matplotlib.pylab as plt # 設置分辨率
plt.rcParams['savefig.dpi'] = 500  # 圖片分辨率
plt.rcParams['figure.dpi'] = 500 # 分辨率device = "cpu"device
'cpu'

2、導入數據

data_df = pd.read_csv('./woodpine2.csv')data_df.head()
TimeTem1CO 1Soot 1
00.00025.00.00.0
10.22825.00.00.0
20.45625.00.00.0
30.68525.00.00.0
40.91325.00.00.0

數據位實驗數據,數據是定時收集的:

  • Time: 時間從 0.000 開始,每隔大約 0.228 的間隔遞增。
  • Tem1: 是溫度(Temperature)的縮寫,單位可能是攝氏度 (°C)。
  • CO: 是指一氧化碳 (Carbon Monoxide) 的濃度。
  • Soot: 是指煙炱或炭黑 (Soot) 的濃度。
# 數據信息查詢
data_df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5948 entries, 0 to 5947
Data columns (total 4 columns):#   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  0   Time    5948 non-null   float641   Tem1    5948 non-null   float642   CO 1    5948 non-null   float643   Soot 1  5948 non-null   float64
dtypes: float64(4)
memory usage: 186.0 KB
# 數據缺失值
data_df.isnull().sum()
Time      0
Tem1      0
CO 1      0
Soot 1    0
dtype: int64

3、數據可視化

時間是每隔固定時間收集的,故有用特征為:溫度、CO、Soot

_, ax = plt.subplots(1, 3, constrained_layout=True, figsize=(14, 3)) # constrained_layout=True  自動調整子圖sns.lineplot(data=data_df['Tem1'], ax=ax[0])
sns.lineplot(data=data_df['CO 1'], ax=ax[1])
sns.lineplot(data=data_df['Soot 1'], ax=ax[2])
plt.show()

?
在這里插入圖片描述

?

4、相關性分析(熱力圖展示)

columns = ['Tem1', 'CO 1', 'Soot 1']plt.figure(figsize=(8, 6))
sns.heatmap(data=data_df[columns].corr(), annot=True, fmt=".2f")
plt.show()

?
在這里插入圖片描述

?

# 統計分析
data_df.describe()
TimeTem1CO 1Soot 1
count5948.0000005948.0000005948.0000005948.000000
mean226.133238152.5349190.0000350.000222
std96.60144577.0260190.0000220.000144
min0.00000025.0000000.0000000.000000
25%151.00000089.0000000.0000150.000093
50%241.000000145.0000000.0000340.000220
75%310.000000220.0000000.0000540.000348
max367.000000307.0000000.0000800.000512

當我看到相關性為1的時候,我也驚呆了,后面查看了統計量,還是沒發現出來,但是看上面的可視化圖展示,我信了,隨著溫度升高,CO化碳、Soot濃度一起升高,這個也符合火災的場景,數據沒啥問題

5、特征提取

# 由于時間間隔一樣,故這里去除
data = data_df.iloc[:, 1:]data.head(3)
Tem1CO 1Soot 1
025.00.00.0
125.00.00.0
225.00.00.0
data.tail(3)
Tem1CO 1Soot 1
5945292.00.0000770.000491
5946291.00.0000760.000489
5947290.00.0000760.000487

特征間數據差距較大,故需要做標準化

2、時間數據構建

1、數據標準化

from sklearn.preprocessing import MinMaxScalersc = MinMaxScaler()for col in ['Tem1', 'CO 1', 'Soot 1']:data[col] = sc.fit_transform(data[col].values.reshape(-1, 1))# 查看維度
data.shape
(5948, 3)

2、構建時間數據集

LSTM 模型期望輸入數據的形狀是 (樣本數, 時間步長, 特征數),本文數據:

  • 樣本數:5948
  • 時間步長:本文設置為8
    • 即是:取特征每8行(Tem1, CO 1, Soot 1)為一個時間段,第9個時間段的Tem1為y(溫度),火災預測本質也是預測溫度
  • 特征數:3
width_x = 8
width_y = 1# 構建時間數據X, y(解釋在上)
X, y = [], []# 設置開始構建數據位置
start_position = 0for _, _ in data.iterrows():in_end = start_position + width_xout_end = in_end + width_y if out_end < len(data):# 采集時間數據集X_ = np.array(data.iloc[start_position : in_end, :])y_ = np.array(data.iloc[in_end : out_end, 0])X.append(X_)y.append(y_)start_position += 1# 轉化為數組
X = np.array(X)
# y也要構建出適合維度的變量
y = np.array(y).reshape(-1, 1, 1)X.shape, y.shape
((5939, 8, 3), (5939, 1, 1))

3、劃分數據集和加載數據集

1、數據劃分

# 取前5000個數據位訓練集,后面為測試集
X_train = torch.tensor(np.array(X[:5000, ]), dtype=torch.float32)
X_test = torch.tensor(np.array(X[5000:, ]), dtype=torch.float32)y_train = torch.tensor(np.array(y[:5000, ]), dtype=torch.float32)
y_test = torch.tensor(np.array(y[5000:, ]), dtype=torch.float32)X_train.shape, y_train.shape 
(torch.Size([5000, 8, 3]), torch.Size([5000, 1, 1]))

數據集構建:

  • TensorDataset 是 PyTorch 中的一個類,用于將兩個或多個張量組合成一個數據集。每個樣本由一個輸入張量和一個目標張量組成(構建的數據集中,每一個輸入對應一個輸出)
from torch.utils.data import TensorDataset, DataLoaderbatch_size = 64train_dl = DataLoader(TensorDataset(X_train, y_train),batch_size=batch_size,shuffle=True)test_dl = DataLoader(TensorDataset(X_test, y_test),batch_size=batch_size,shuffle=False)

3、模型構建

nn.LSTM 的 API

*構造函數

torch.nn.LSTM(input_size, hidden_size, num_layers=1, bias=True, batch_first=False, dropout=0, bidirectional=False, proj_size=0)
  • input_size (int):每個時間步輸入特征的數量。
  • hidden_size (int):LSTM 層中隱藏狀態(h)的特征數。這也是 LSTM 輸出的特征數量,除非指定了 proj_size
  • num_layers (int, 可選):LSTM 層的數量。默認值為 1。
  • bias (bool, 可選):如果為 True,則使用偏置項;否則不使用。默認值為 True
  • batch_first (bool, 可選):如果為 True,則輸入和輸出張量的形狀為 (batch, seq, feature);否則為 (seq, batch, feature)。默認值為 False
  • dropout (float, 可選):除了最后一層之外的所有 LSTM 層之后應用的 dropout 概率。如果 num_layers = 1,則不會應用 dropout。默認值為 0。
  • bidirectional (bool, 可選):如果為 True,則變為雙向 LSTM。默認值為 False
  • proj_size (int, 可選):如果大于 0,則 LSTM 會將隱藏狀態投影到一個不同維度的空間。這減少了模型參數的數量,并且可以加速訓練。默認值為 0,表示沒有投影。

輸入

  • input (tensor):形狀為 (seq_len, batch, input_size) 或者如果 batch_first=True 則為 (batch, seq_len, input_size)
  • (h_0, c_0) (tuple, 可選):包含兩個張量 (h_0, c_0),分別代表初始的隱藏狀態和細胞狀態。它們的形狀均為 (num_layers * num_directions, batch, hidden_size)。如果沒有提供,那么所有狀態都會被初始化為零。

其中

  • 單向 LSTM (bidirectional=False):此時 num_directions=1。LSTM 只按照時間序列的順序從前向后處理數據,即從第一個時間步到最后一個時間步。
  • 雙向 LSTM (bidirectional=True):此時 num_directions=2。雙向 LSTM 包含兩個獨立的 LSTM 層,一個按正常的時間順序從前向后處理數據,另一個則反過來從后向前處理數據。這樣做可以讓模型同時捕捉到過去和未來的信息,對于某些任務(如自然語言處理中的語義理解)特別有用。

輸出(兩個)

  • output (tensor):包含了最后一個時間步的輸出特征(h_t)。如果 batch_first=True,則形狀為 (batch, seq_len, num_directions * hidden_size);否則為 (seq_len, batch, num_directions * hidden_size)。注意,如果 proj_size > 0,則輸出的最后一個維度將是 num_directions * proj_size
  • (h_n, c_n) (tuple):包含兩個張量 (h_n, c_n),分別代表所有時間步后的最終隱藏狀態和細胞狀態。它們的形狀均為 (num_layers * num_directions, batch, hidden_size)。同樣地,如果 proj_size > 0,則 h_n 的最后一個維度將是 proj_size
'''
模型采用兩個lstm層:3->320:lstm->320:lstm(進一步提取時間特征)->1:linear
'''class model_lstm(nn.Module):def __init__(self):super().__init__()self.lstm1 = nn.LSTM(input_size=3, hidden_size=320, num_layers=1, batch_first=True)self.lstm2 = nn.LSTM(input_size=320, hidden_size=320, num_layers=1, batch_first=True)self.fc = nn.Linear(320, 1)def forward(self, x):out, hidden = self.lstm1(x)out, _ = self.lstm2(out)out = self.fc(out)   # 這個時候,輸出維度(batch_size, sequence_length, output_size), 這里是(64, 8, 1)return out[:, -1, :].view(-1, 1, 1)  # 取最后一條數據  (64, 1, 1), 在pytorch中如果一個維度是1,可能會自動壓縮,所以這里需要再次形狀重塑model = model_lstm().to(device)
model
model_lstm((lstm1): LSTM(3, 320, batch_first=True)(lstm2): LSTM(320, 320, batch_first=True)(fc): Linear(in_features=320, out_features=1, bias=True)
)
# 先做測試
model(torch.rand(30, 8, 3)).shape
torch.Size([30, 1, 1])

4、模型訓練

1、訓練集函數

def train(train_dl, model, loss_fn, optimizer, lr_scheduler=None):size = len(train_dl.dataset)num_batchs = len(train_dl)train_loss = 0for X, y in train_dl:X, y = X.to(device), y.to(device)pred = model(X)loss = loss_fn(pred, y)optimizer.zero_grad()loss.backward()optimizer.step()train_loss += loss.item()if lr_scheduler is not None:lr_scheduler.step()print("learning rate = {:.5f}".format(optimizer.param_groups[0]['lr']), end="  ")train_loss /= num_batchsreturn train_loss

2、測試集函數

def test(test_dl, model, loss_fn):size = len(test_dl.dataset)num_batchs = len(test_dl)test_loss = 0with torch.no_grad():for X, y in test_dl:X, y = X.to(device), y.to(device)pred = model(X)loss = loss_fn(pred, y)test_loss += loss.item()test_loss /= num_batchsreturn test_loss

3、模型訓練

# 設置超參數
loss_fn = nn.MSELoss()
lr = 1e-1
opt = torch.optim.SGD(model.parameters(), lr=lr, weight_decay=1e-4) # weight_decay 實際上是在應用 L2 正則化(也稱為權重衰減)epochs = 50# 動態調整學習率
lr_scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(opt, epochs, last_epoch=-1)train_loss = []
test_loss = []for epoch in range(epochs):model.train()epoch_train_loss = train(train_dl, model, loss_fn, opt, lr_scheduler)model.eval()epoch_test_loss = test(test_dl, model, loss_fn)train_loss.append(epoch_train_loss)test_loss.append(epoch_test_loss)template = ('Epoch:{:2d}, Train_loss:{:.5f}, Test_loss:{:.5f}')     print(template.format(epoch+1, epoch_train_loss,  epoch_test_loss))
learning rate = 0.09990  Epoch: 1, Train_loss:0.00320, Test_loss:0.00285
learning rate = 0.09961  Epoch: 2, Train_loss:0.00022, Test_loss:0.00084
learning rate = 0.09911  Epoch: 3, Train_loss:0.00015, Test_loss:0.00058
learning rate = 0.09843  Epoch: 4, Train_loss:0.00015, Test_loss:0.00057
learning rate = 0.09755  Epoch: 5, Train_loss:0.00015, Test_loss:0.00072
learning rate = 0.09649  Epoch: 6, Train_loss:0.00015, Test_loss:0.00059
learning rate = 0.09524  Epoch: 7, Train_loss:0.00015, Test_loss:0.00058
learning rate = 0.09382  Epoch: 8, Train_loss:0.00015, Test_loss:0.00058
learning rate = 0.09222  Epoch: 9, Train_loss:0.00015, Test_loss:0.00057
learning rate = 0.09045  Epoch:10, Train_loss:0.00015, Test_loss:0.00066
learning rate = 0.08853  Epoch:11, Train_loss:0.00015, Test_loss:0.00077
learning rate = 0.08645  Epoch:12, Train_loss:0.00015, Test_loss:0.00071
learning rate = 0.08423  Epoch:13, Train_loss:0.00015, Test_loss:0.00071
learning rate = 0.08187  Epoch:14, Train_loss:0.00015, Test_loss:0.00061
learning rate = 0.07939  Epoch:15, Train_loss:0.00015, Test_loss:0.00056
learning rate = 0.07679  Epoch:16, Train_loss:0.00015, Test_loss:0.00065
learning rate = 0.07409  Epoch:17, Train_loss:0.00015, Test_loss:0.00056
learning rate = 0.07129  Epoch:18, Train_loss:0.00015, Test_loss:0.00058
learning rate = 0.06841  Epoch:19, Train_loss:0.00015, Test_loss:0.00062
learning rate = 0.06545  Epoch:20, Train_loss:0.00015, Test_loss:0.00062
learning rate = 0.06243  Epoch:21, Train_loss:0.00015, Test_loss:0.00069
learning rate = 0.05937  Epoch:22, Train_loss:0.00015, Test_loss:0.00057
learning rate = 0.05627  Epoch:23, Train_loss:0.00015, Test_loss:0.00064
learning rate = 0.05314  Epoch:24, Train_loss:0.00015, Test_loss:0.00072
learning rate = 0.05000  Epoch:25, Train_loss:0.00015, Test_loss:0.00061
learning rate = 0.04686  Epoch:26, Train_loss:0.00015, Test_loss:0.00058
learning rate = 0.04373  Epoch:27, Train_loss:0.00015, Test_loss:0.00063
learning rate = 0.04063  Epoch:28, Train_loss:0.00015, Test_loss:0.00059
learning rate = 0.03757  Epoch:29, Train_loss:0.00015, Test_loss:0.00063
learning rate = 0.03455  Epoch:30, Train_loss:0.00015, Test_loss:0.00060
learning rate = 0.03159  Epoch:31, Train_loss:0.00015, Test_loss:0.00067
learning rate = 0.02871  Epoch:32, Train_loss:0.00015, Test_loss:0.00065
learning rate = 0.02591  Epoch:33, Train_loss:0.00015, Test_loss:0.00063
learning rate = 0.02321  Epoch:34, Train_loss:0.00015, Test_loss:0.00063
learning rate = 0.02061  Epoch:35, Train_loss:0.00015, Test_loss:0.00067
learning rate = 0.01813  Epoch:36, Train_loss:0.00015, Test_loss:0.00062
learning rate = 0.01577  Epoch:37, Train_loss:0.00015, Test_loss:0.00065
learning rate = 0.01355  Epoch:38, Train_loss:0.00015, Test_loss:0.00064
learning rate = 0.01147  Epoch:39, Train_loss:0.00014, Test_loss:0.00063
learning rate = 0.00955  Epoch:40, Train_loss:0.00015, Test_loss:0.00063
learning rate = 0.00778  Epoch:41, Train_loss:0.00015, Test_loss:0.00060
learning rate = 0.00618  Epoch:42, Train_loss:0.00014, Test_loss:0.00063
learning rate = 0.00476  Epoch:43, Train_loss:0.00015, Test_loss:0.00063
learning rate = 0.00351  Epoch:44, Train_loss:0.00015, Test_loss:0.00063
learning rate = 0.00245  Epoch:45, Train_loss:0.00015, Test_loss:0.00062
learning rate = 0.00157  Epoch:46, Train_loss:0.00015, Test_loss:0.00062
learning rate = 0.00089  Epoch:47, Train_loss:0.00015, Test_loss:0.00063
learning rate = 0.00039  Epoch:48, Train_loss:0.00015, Test_loss:0.00063
learning rate = 0.00010  Epoch:49, Train_loss:0.00015, Test_loss:0.00063
learning rate = 0.00000  Epoch:50, Train_loss:0.00015, Test_loss:0.00063

5、結果展示

1、損失函數

import matplotlib.pyplot as plt 
from datetime import datetime 
current_time = datetime.now() # 獲取當前時間 plt.figure(figsize=(5, 3),dpi=120)   
plt.plot(train_loss    , label='LSTM Training Loss') 
plt.plot(test_loss, label='LSTM Validation Loss')   
plt.title('Training and Validation Loss') 
plt.xlabel(current_time) # 打卡請帶上時間戳,否則代碼截圖無效 
plt.legend() 
plt.show()

?
在這里插入圖片描述

?

效果不錯,收斂了

2、預測展示

predicted_y_lstm = sc.inverse_transform(model(X_test).detach().numpy().reshape(-1,1))                    # 測試集輸入模型進行預測 
y_test_1         = sc.inverse_transform(y_test.reshape(-1,1)) 
y_test_one       = [i[0] for i in y_test_1] 
predicted_y_lstm_one = [i[0] for i in predicted_y_lstm]   
plt.figure(figsize=(5, 3),dpi=120) # 畫出真實數據和預測數據的對比曲線 
plt.plot(y_test_one[:2000], color='red', label='real_temp') 
plt.plot(predicted_y_lstm_one[:2000], color='blue', label='prediction')   
plt.title('Title') 
plt.xlabel('X') 
plt.ylabel('Y') 
plt.legend() 
plt.show()

?
在這里插入圖片描述

?

3、R2評估

from sklearn import metrics 
""" 
RMSE :均方根誤差  ----->  對均方誤差開方 
R2   :決定系數,可以簡單理解為反映模型擬合優度的重要的統計量 
""" 
RMSE_lstm  = metrics.mean_squared_error(predicted_y_lstm_one, y_test_1)**0.5 
R2_lstm    = metrics.r2_score(predicted_y_lstm_one, y_test_1)   
print('均方根誤差: %.5f' % RMSE_lstm) 
print('R2: %.5f' % R2_lstm)
均方根誤差: 0.00001
R2: 0.82422

rmse、r2都不錯,但是擬合度還可以再提高

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

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

相關文章

基于 WEB 開發的汽車養護系統設計與實現

標題:基于 WEB 開發的汽車養護系統設計與實現 內容:1.摘要 本文介紹了基于 WEB 開發的汽車養護系統的設計與實現。文章首先闡述了系統的背景和目的&#xff0c;即隨著汽車保有量的增加&#xff0c;汽車養護需求日益增長&#xff0c;傳統的汽車養護方式已經無法滿足人們的需求&…

GitLab集成Jira

GitLab與Jira集成的兩種方式 GitLab 提供了兩種 Jira 集成&#xff0c;即Jira議題集成和Jira開發面板集成&#xff0c;可以配置一個或者兩個都配置。 具體集成步驟可以參考官方文檔Jira 議題集成&#xff08;極狐GitLab文檔&#xff09;和Jira 開發面板集成&#xff08;極狐G…

【爬蟲】某某查cookie逆向

代碼僅供技術人員進行學習和研究使用&#xff0c;請勿將其用于非法用途或以任何方式竊取第三方數據。使用該代碼產生的所有風險均由用戶自行承擔&#xff0c;作者不對用戶因使用該代碼而造成的任何損失或損害承擔任何責任。 加密參數 加密參數主要是cookie&#xff0c;其中只有…

A5.Springboot-LLama3.2服務自動化構建(二)——Jenkins流水線構建配置初始化設置

下面我們接著上一篇文章《A4.Springboot-LLama3.2服務自動化構建(一)——構建docker鏡像配置》繼續往下分析,在自動化流水線構建過程當中的相關初始化設置和腳本編寫。 一、首先需要先安裝Jenkins 主部分請參考我前面寫的一篇文章《Jenkins持續集成與交付安裝配置》 二、…

如何設置HTTPS站點防御?

設置HTTPS站點防御涉及到多個層面的安全措施&#xff0c;包括但不限于配置Web服務器、應用安全頭信息、使用內容安全策略&#xff08;CSP&#xff09;、啟用HSTS和OCSP Stapling等。下面是一些關鍵的步驟來增強HTTPS網站的安全性&#xff1a; 1. 使用強加密協議和密鑰交換算法…

[Java]類和對象

1. 什么是類&#xff1f; 類&#xff08;Class&#xff09;是藍圖或者模板。它定義了對象的屬性和行為。 類就是一種抽象的模板&#xff0c;你可以通過它創建多個對象。類定義了對象的屬性&#xff08;變量&#xff09;和行為&#xff08;方法&#xff09;。我們可以把類理解…

win32匯編環境,窗口程序中基礎列表框的應用舉例

;運行效果 ;win32匯編環境,窗口程序中基礎列表框的應用舉例 ;比如在窗口程序中生成列表框&#xff0c;增加子項&#xff0c;刪除某項&#xff0c;取得指定項內容等 ;直接抄進RadAsm可編譯運行。重點部分加備注。 ;以下是ASM文件 ;>>>>>>>>>>>…

【機器學習實戰入門】使用LSTM機器學習預測股票價格

機器學習在股票價格預測中有重要的應用。在這個機器學習項目中&#xff0c;我們將討論如何預測股票的收益。這是一個非常復雜的任務&#xff0c;充滿了不確定性。我們將會把這個項目分成兩部分進行開發&#xff1a; 首先&#xff0c;我們將學習如何使用 LSTM 神經網絡預測股票…

【編程語言】C/C++語言常見標準和規范

C/C 是兩種功能強大且廣泛使用的編程語言。盡管它們沒有像 Java 那樣強制性的命名規則&#xff0c;但為了提高代碼的可讀性和可維護性&#xff0c;遵循一些普遍認同的編程規范和標準仍然是非常重要的。本文將探討 C/C 編程中的一些命名規范及標準&#xff0c;以幫助開發者編寫更…

使用C語言實現棧的插入、刪除和排序操作

棧是一種后進先出(LIFO, Last In First Out)的數據結構,這意味著最后插入的元素最先被刪除。在C語言中,我們可以通過數組或鏈表來實現棧。本文將使用數組來實現一個簡單的棧,并提供插入(push)、刪除(pop)以及排序(這里采用一種簡單的排序方法,例如冒泡排序)的操作示…

08、如何預防SQL注入

目錄 1、分析及其存在哪些危險 2、預防SQL注入 1、分析及其存在哪些危險 原理: SQL 注入是一種常見的網絡攻擊手段,攻擊者通過在用戶輸入中插入惡意的 SQL 語句,利用程序對用戶輸入處理不當的漏洞,使惡意 SQL 語句被數據庫服務器執行。 通常發生在應用程序將用戶輸入直接拼…

【爬蟲】使用 Scrapy 框架爬取豆瓣電影 Top 250 數據的完整教程

前言 在大數據和網絡爬蟲領域&#xff0c;Scrapy 是一個功能強大且廣泛使用的開源爬蟲框架。它能夠幫助我們快速地構建爬蟲項目&#xff0c;并高效地從各種網站中提取數據。在本篇文章中&#xff0c;我將帶大家從零開始使用 Scrapy 框架&#xff0c;構建一個簡單的爬蟲項目&am…

1.11 思維樹(Tree-of-Thoughts, ToT):續寫佳話

思維樹(Tree-of-Thoughts, ToT):續寫佳話 人工智能在推理和決策方面的突破,越來越依賴于模型能夠以更高效、更靈活的方式進行推理。與傳統的順序性推理方法不同,**思維樹(Tree-of-Thoughts,ToT)**提供了一種基于樹狀結構的推理方式,鼓勵模型從多個角度進行探索,并在…

NVIDIA 下 基于Ubuntun20.04下 使用腳本安裝 ros2-foxy 和 使用docker安裝 ros2-foxy

一、前提介紹&#xff1a; 本文主要采用兩種方式在NVIDIA 下基于 Ubuntun20.04安裝 ros2-foxy。 使用環境&#xff1a; NVIDIA 為 Jetson 系列下 Jetson Xavier NX&#xff1b; Ubuntun版本&#xff1a;20.04 二、安裝方法&#xff1a; 1、使用腳本編譯方式&#xff1a; 使…

wx030基于springboot+vue+uniapp的養老院系統小程序

開發語言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服務器&#xff1a;tomcat7數據庫&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;數據庫工具&#xff1a;Navicat11開發軟件&#xff1a;eclipse/myeclipse/ideaMaven包&#…

【人工智能】Python中的自動化機器學習(AutoML):如何使用TPOT優化模型選擇

《Python OpenCV從菜鳥到高手》帶你進入圖像處理與計算機視覺的大門&#xff01; 解鎖Python編程的無限可能&#xff1a;《奇妙的Python》帶你漫游代碼世界 隨著機器學習在各行業的廣泛應用&#xff0c;模型選擇和優化成為了數據科學家面臨的主要挑戰之一。自動化機器學習&am…

計算機網絡常見協議

目錄 OSPF(Open Shortest Path First) NAT(Network Address Translation) ICMP (Internet Control Message Protocol) HTTPS&#xff08;SSL/TLS加密&#xff09; HTTPS協議 1. 對稱加密 2. 非對稱加密 3. 證書驗證 4. 回顧https協議傳輸流程 HTTP TCP UDP 1. TCP&a…

1.7 ChatGPT:引領AI對話革命的致勝之道

ChatGPT:引領AI對話革命的致勝之道 隨著人工智能(AI)技術的迅猛發展,特別是在自然語言處理(NLP)領域,OpenAI 的 ChatGPT 已經成為了舉世矚目的技術突破。從普通的自動化客服到深入的創作與協作,ChatGPT 通過其卓越的語言理解和生成能力,改變了人們與計算機交互的方式…

靜態綜合路由實驗

實驗拓撲 實驗要求 1.除R5的環回地址外&#xff0c;整個其他所有網段基于192.168.1.0/24進行合理的IP地址劃分 2.R1-R4每個路由器存在兩個環回接口&#xff0c;用于模擬pc網段&#xff1b;地址也在192.168.1.0/24這個網絡范圍內 3.R1-R4上不能直接編寫到達5.5.5.0/24的靜態路由…

腳本工具:PYTHON

Python 是一種高級編程語言&#xff0c;以其簡潔清晰的語法和強大的功能被廣泛應用于各種領域&#xff0c;包括自動化腳本編寫、數據分析、機器學習、Web開發等。以下是一些關于使用 Python 編寫腳本工具的基本介紹、常用庫以及一些實用技巧總結。 這里寫目錄標題 基礎知識安裝…