【機器學習】自定義數據集使用框架的線性回歸方法對其進行擬合

一、使用框架的線性回歸方法

1. 基礎原理

????????在自求導線性回歸中,我們需要先自定義參數,并且需要通過數學公式來對w和b進行求導,然后在反向傳播過程中通過梯度下降的方式來更新參數,從而降低損失值

2. 實現步驟

① 散點輸入

????????有一些散點,將它們繪制在一個二維坐標中,其分布如下圖所示:

② 定義前向模型

????????準備好數據之后,就需要定義前向模型了。在這里給出了“定義前向模型”組件,如下圖所示。

③ 定義損失函數和優化器

????????在選擇好前向的模型后,需要定義反向傳播過程中用到的一些超參數。在深度學習的三種框架中,關于損失函數和優化器的代碼實現都已經封裝好了,只需要選擇使用哪種即可。

④ 開始迭代

在選擇好損失函數及優化器之后,我們就可以進行迭代了。通過不斷的迭代更新,使w和b的值不斷更新,從而降低損失函數值,使直線的擬合效果更好,本實驗中,“開始迭代”組件中默認選擇的迭代次數是1000次,可以選擇不同的迭代次數來觀察直線的擬合效果。

⑤ 顯示頻率設置

????????迭代次數選好之后,就開始進行迭代了,為了能夠觀察到迭代過程中的現象,給出了“顯示頻率設置”的組件,該組件能夠設置每迭代多少次,顯示一次當前的參數值和損失值。

⑥?擬合線顯示與輸出

????????選擇好顯示頻率之后,通過“擬合線顯示與輸出”組件來查看我們的迭代過程中參數、直線及損失值的變化,內容如下圖所示:

二、pytorch框架線性回歸

1. 數據部分

  • 首先自定義了一個簡單的數據集,特征?X?是 100 個隨機樣本,每個樣本一個特征,目標值?y?基于線性關系并添加了噪聲。
  • 將?numpy?數組轉換為 PyTorch 張量,方便后續在模型中使用。

2. 模型定義部分

方案 1:使用?nn.Sequential?直接按順序定義了一個線性層,簡潔直觀。

import torch
import torch.nn as nn
import numpy as np
from sklearn.metrics import mean_squared_error, r2_score# 自定義數據集
X = np.random.rand(100, 1).astype(np.float32)
y = 2 * X + 1 + 0.3 * np.random.randn(100, 1).astype(np.float32)# 轉換為 PyTorch 張量
X_tensor = torch.from_numpy(X)
y_tensor = torch.from_numpy(y)# 定義線性回歸模型
model = nn.Sequential(nn.Linear(1, 1)
)# 定義損失函數和優化器
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)# 訓練模型
num_epochs = 1000
for epoch in range(num_epochs):# 前向傳播outputs = model(X_tensor)loss = criterion(outputs, y_tensor)# 反向傳播和優化optimizer.zero_grad()loss.backward()optimizer.step()if (epoch + 1) % 100 == 0:print(f'Epoch [{epoch + 1}/{num_epochs}], Loss: {loss.item():.4f}')# 模型評估
with torch.no_grad():y_pred = model(X_tensor).numpy()mse = mean_squared_error(y, y_pred)
r2 = r2_score(y, y_pred)
print(f"均方誤差 (MSE): {mse}")
print(f"決定系數 (R2): {r2}")# 輸出模型的系數和截距
print("模型系數:", model[0].weight.item())
print("模型截距:", model[0].bias.item())

方案 2:使用?nn.ModuleList?存儲線性層,在?forward?方法中依次調用層進行前向傳播,適合動態構建層序列。

import torch
import torch.nn as nn
import numpy as np
from sklearn.metrics import mean_squared_error, r2_score# 自定義數據集
X = np.random.rand(100, 1).astype(np.float32)
y = 2 * X + 1 + 0.3 * np.random.randn(100, 1).astype(np.float32)# 轉換為 PyTorch 張量
X_tensor = torch.from_numpy(X)
y_tensor = torch.from_numpy(y)# 定義線性回歸模型
class LinearRegression(nn.Module):def __init__(self):super(LinearRegression, self).__init__()self.layers = nn.ModuleList([nn.Linear(1, 1)])def forward(self, x):for layer in self.layers:x = layer(x)return xmodel = LinearRegression()# 定義損失函數和優化器
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)# 訓練模型
num_epochs = 1000
for epoch in range(num_epochs):# 前向傳播outputs = model(X_tensor)loss = criterion(outputs, y_tensor)# 反向傳播和優化optimizer.zero_grad()loss.backward()optimizer.step()if (epoch + 1) % 100 == 0:print(f'Epoch [{epoch + 1}/{num_epochs}], Loss: {loss.item():.4f}')# 模型評估
with torch.no_grad():y_pred = model(X_tensor).numpy()mse = mean_squared_error(y, y_pred)
r2 = r2_score(y, y_pred)
print(f"均方誤差 (MSE): {mse}")
print(f"決定系數 (R2): {r2}")# 輸出模型的系數和截距
print("模型系數:", model.layers[0].weight.item())
print("模型截距:", model.layers[0].bias.item())

方案 3:使用?nn.ModuleDict?以字典形式存儲層,通過鍵名調用層,適合需要對層進行命名和靈活訪問的場景。

import torch
import torch.nn as nn
import numpy as np
from sklearn.metrics import mean_squared_error, r2_score# 自定義數據集
X = np.random.rand(100, 1).astype(np.float32)
y = 2 * X + 1 + 0.3 * np.random.randn(100, 1).astype(np.float32)# 轉換為 PyTorch 張量
X_tensor = torch.from_numpy(X)
y_tensor = torch.from_numpy(y)# 定義線性回歸模型
class LinearRegression(nn.Module):def __init__(self):super(LinearRegression, self).__init__()self.layers = nn.ModuleDict({'linear': nn.Linear(1, 1)})def forward(self, x):x = self.layers['linear'](x)return xmodel = LinearRegression()# 定義損失函數和優化器
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)# 訓練模型
num_epochs = 1000
for epoch in range(num_epochs):# 前向傳播outputs = model(X_tensor)loss = criterion(outputs, y_tensor)# 反向傳播和優化optimizer.zero_grad()loss.backward()optimizer.step()if (epoch + 1) % 100 == 0:print(f'Epoch [{epoch + 1}/{num_epochs}], Loss: {loss.item():.4f}')# 模型評估
with torch.no_grad():y_pred = model(X_tensor).numpy()mse = mean_squared_error(y, y_pred)
r2 = r2_score(y, y_pred)
print(f"均方誤差 (MSE): {mse}")
print(f"決定系數 (R2): {r2}")# 輸出模型的系數和截距
print("模型系數:", model.layers['linear'].weight.item())
print("模型截距:", model.layers['linear'].bias.item())

方案 4:直接繼承?nn.Module,在?__init__?方法中定義線性層,在?forward?方法中實現前向傳播邏輯,是最常見和基礎的定義模型方式。

import torch
import torch.nn as nn
import numpy as np
from sklearn.metrics import mean_squared_error, r2_score# 自定義數據集
X = np.random.rand(100, 1).astype(np.float32)
y = 2 * X + 1 + 0.3 * np.random.randn(100, 1).astype(np.float32)# 轉換為 PyTorch 張量
X_tensor = torch.from_numpy(X)
y_tensor = torch.from_numpy(y)# 定義線性回歸模型
class LinearRegression(nn.Module):def __init__(self):super(LinearRegression, self).__init__()self.linear = nn.Linear(1, 1)def forward(self, x):return self.linear(x)model = LinearRegression()# 定義損失函數和優化器
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)# 訓練模型
num_epochs = 1000
for epoch in range(num_epochs):# 前向傳播outputs = model(X_tensor)loss = criterion(outputs, y_tensor)# 反向傳播和優化optimizer.zero_grad()loss.backward()optimizer.step()if (epoch + 1) % 100 == 0:print(f'Epoch [{epoch + 1}/{num_epochs}], Loss: {loss.item():.4f}')# 模型評估
with torch.no_grad():y_pred = model(X_tensor).numpy()mse = mean_squared_error(y, y_pred)
r2 = r2_score(y, y_pred)
print(f"均方誤差 (MSE): {mse}")
print(f"決定系數 (R2): {r2}")# 輸出模型的系數和截距
print("模型系數:", model.linear.weight.item())
print("模型截距:", model.linear.bias.item())

3. 訓練和評估部分

  • 定義了均方誤差損失函數?nn.MSELoss?和隨機梯度下降優化器?torch.optim.SGD
  • 通過多個 epoch 進行訓練,每個 epoch 包含前向傳播、損失計算、反向傳播和參數更新。
  • 訓練結束后,在無梯度計算模式下進行預測,并使用?scikit-learn?的指標計算均方誤差和決定系數評估模型性能,最后輸出模型的系數和截距。

三、tensorflow框架線性回歸

1. 數據部分

  • 首先自定義了一個簡單的數據集,特征?X?是 100 個隨機樣本,每個樣本一個特征,目標值?y?基于線性關系并添加了噪聲。
  • tensorflow框架不需要numpy?數組轉換為相應的張量,可以直接在模型中使用數據集。

2. 模型定義部分

方案 1:model = tf.keras.Sequential([tf.keras.layers.Dense(1, input_shape=(1,))])

解釋

  • 此方案使用?tf.keras.Sequential?構建模型,在列表中直接定義了一個?Dense?層,input_shape=(1,)?表明輸入數據的形狀。
  • 編譯模型時,選擇隨機梯度下降(SGD)優化器和均方誤差損失函數。
  • 訓練完成后,使用?sklearn?的指標評估模型,并輸出模型的系數和截距。
import tensorflow as tf
import numpy as np
from sklearn.metrics import mean_squared_error, r2_score# 自定義數據集
X = np.random.rand(100, 1).astype(np.float32)
y = 2 * X + 1 + 0.3 * np.random.randn(100, 1).astype(np.float32)# 構建模型
model = tf.keras.Sequential([tf.keras.layers.Dense(1, input_shape=(1,))
])# 編譯模型
model.compile(optimizer=tf.keras.optimizers.SGD(learning_rate=0.01),loss='mean_squared_error')# 訓練模型
history = model.fit(X, y, epochs=1000, verbose=0)# 模型評估
y_pred = model.predict(X)
mse = mean_squared_error(y, y_pred)
r2 = r2_score(y, y_pred)
print(f"均方誤差 (MSE): {mse}")
print(f"決定系數 (R2): {r2}")# 輸出模型的系數和截距
weights, biases = model.layers[0].get_weights()
print(f"模型系數: {weights[0][0]}")
print(f"模型截距: {biases[0]}")

方案 2:model = tf.keras.Sequential()

解釋

  • 這種方式先創建一個空的?Sequential?模型,再使用?add?方法添加?Dense?層。
  • 后續編譯、訓練、評估和輸出模型參數的步驟與方案 1 類似。
import tensorflow as tf
import numpy as np
from sklearn.metrics import mean_squared_error, r2_score# 自定義數據集
X = np.random.rand(100, 1).astype(np.float32)
y = 2 * X + 1 + 0.3 * np.random.randn(100, 1).astype(np.float32)# 構建模型
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(1, input_shape=(1,)))# 編譯模型
model.compile(optimizer=tf.keras.optimizers.SGD(learning_rate=0.01),loss='mean_squared_error')# 訓練模型
history = model.fit(X, y, epochs=1000, verbose=0)# 模型評估
y_pred = model.predict(X)
mse = mean_squared_error(y, y_pred)
r2 = r2_score(y, y_pred)
print(f"均方誤差 (MSE): {mse}")
print(f"決定系數 (R2): {r2}")# 輸出模型的系數和截距
weights, biases = model.layers[0].get_weights()
print(f"模型系數: {weights[0][0]}")
print(f"模型截距: {biases[0]}")

方案 3:自定義模型類

解釋

  • 繼承?Model?基類創建自定義模型類?Linear,在?__init__?方法中定義?Dense?層。
  • call?方法用于實現前向傳播邏輯,類似于 PyTorch 中的?forward?方法。
  • 后續的編譯、訓練、評估和參數輸出流程和前面方案一致。
import tensorflow as tf
from tensorflow.keras import Model
import numpy as np
from sklearn.metrics import mean_squared_error, r2_score# 自定義數據集
X = np.random.rand(100, 1).astype(np.float32)
y = 2 * X + 1 + 0.3 * np.random.randn(100, 1).astype(np.float32)# 自定義模型類
class Linear(Model):def __init__(self):super(Linear, self).__init__()self.linear = tf.keras.layers.Dense(1)def call(self, x, **kwargs):x = self.linear(x)return x# 構建模型
model = Linear()# 編譯模型
model.compile(optimizer=tf.keras.optimizers.SGD(learning_rate=0.01),loss='mean_squared_error')# 訓練模型
history = model.fit(X, y, epochs=1000, verbose=0)# 模型評估
y_pred = model.predict(X)
mse = mean_squared_error(y, y_pred)
r2 = r2_score(y, y_pred)
print(f"均方誤差 (MSE): {mse}")
print(f"決定系數 (R2): {r2}")# 輸出模型的系數和截距
weights, biases = model.linear.get_weights()
print(f"模型系數: {weights[0][0]}")
print(f"模型截距: {biases[0]}")

方案 4:函數式 API 構建模型

解釋

  • 使用函數式 API 構建模型,先定義輸入層,再定義?Dense?層,最后使用?Model?類將輸入和輸出連接起來形成模型。
  • 編譯、訓練、評估和參數輸出的步驟和前面方案相同。注意這里通過?model.layers[1]?獲取?Dense?層的權重和偏置,因為第一層是輸入層。
import tensorflow as tf
import numpy as np
from sklearn.metrics import mean_squared_error, r2_score# 自定義數據集
X = np.random.rand(100, 1).astype(np.float32)
y = 2 * X + 1 + 0.3 * np.random.randn(100, 1).astype(np.float32)# 定義函數構建模型
def linear():input = tf.keras.layers.Input(shape=(1,), dtype=tf.float32)y = tf.keras.layers.Dense(1)(input)model = tf.keras.models.Model(inputs=input, outputs=y)return model# 構建模型
model = linear()# 編譯模型
model.compile(optimizer=tf.keras.optimizers.SGD(learning_rate=0.01),loss='mean_squared_error')# 訓練模型
history = model.fit(X, y, epochs=1000, verbose=0)# 模型評估
y_pred = model.predict(X)
mse = mean_squared_error(y, y_pred)
r2 = r2_score(y, y_pred)
print(f"均方誤差 (MSE): {mse}")
print(f"決定系數 (R2): {r2}")# 輸出模型的系數和截距
weights, biases = model.layers[1].get_weights()
print(f"模型系數: {weights[0][0]}")
print(f"模型截距: {biases[0]}")

3. 訓練和評估部分

  • 使用?fit?方法對模型進行訓練,verbose=0?表示不顯示訓練過程中的詳細信息,訓練過程中的損失信息會存儲在?history?對象中。
  • 通過多個 epoch 進行訓練,每個 epoch 包含前向傳播、損失計算、反向傳播和參數更新。
  • 使用?predict?方法進行預測,計算均方誤差和決定系數評估模型性能,通過?model.linear.get_weights()?獲取模型的系數和截距。

四、paddlepaddle框架線性回歸

1. 數據部分

  • 首先自定義了一個簡單的數據集,特征?X?是 100 個隨機樣本,每個樣本一個特征,目標值?y?基于線性關系并添加了噪聲。
  • 將?numpy?數轉換為Paddlepaddle張量,方便后續在模型中使用。

2. 模型定義部分

方案 1:使用?nn.Sequential?組網

代碼解釋

① 數據生成與轉換

  • 生成自定義的特征矩陣?X?和目標值向量?y,并添加高斯噪聲模擬真實數據。
  • 使用?paddle.to_tensor?將?numpy?數組轉換為 PaddlePaddle 張量。

② 模型組網

  • 使用?nn.Sequential?快速構建線性回歸模型,只包含一個?nn.Linear?層。

③ 損失函數和優化器

  • 選擇均方誤差損失函數?nn.MSELoss?和隨機梯度下降優化器?paddle.optimizer.SGD

④ 模型訓練

  • 進行多個輪次的訓練,在每個輪次中進行前向傳播、損失計算、反向傳播和參數更新。
  • 記錄每一輪的損失值,用于后續繪制損失曲線。

⑤ 損失曲線繪制

  • 使用?matplotlib?繪制訓練損失隨輪次的變化曲線,直觀展示模型的訓練過程。

⑥ 模型評估

  • 在無梯度計算的模式下進行預測,計算預測結果的均方誤差和決定系數。

⑦ 輸出模型參數

  • 獲取模型的系數和截距并輸出。
import paddle
import paddle.nn as nn
import numpy as np
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.pyplot as plt# 自定義數據集
# 生成 100 個樣本,每個樣本有 1 個特征
X = np.random.rand(100, 1).astype(np.float32)
# 根據特征生成目標值,添加一些噪聲
y = 2 * X + 1 + 0.3 * np.random.randn(100, 1).astype(np.float32)# 將 numpy 數組轉換為 PaddlePaddle 張量
X = paddle.to_tensor(X)
y = paddle.to_tensor(y)# 使用 nn.Sequential 組網
model = nn.Sequential(nn.Linear(1, 1)
)# 定義損失函數和優化器
criterion = nn.MSELoss()
optimizer = paddle.optimizer.SGD(learning_rate=0.01, parameters=model.parameters())# 訓練模型
num_epochs = 1000
losses = []
for epoch in range(num_epochs):# 前向傳播outputs = model(X)loss = criterion(outputs, y)losses.append(loss.numpy()[0])# 反向傳播和優化optimizer.clear_grad()loss.backward()optimizer.step()if (epoch + 1) % 100 == 0:print(f'Epoch [{epoch + 1}/{num_epochs}], Loss: {loss.numpy()[0]:.4f}')# 繪制訓練損失曲線
plt.plot(range(num_epochs), losses)
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.title('Training Loss')
plt.show()# 模型評估
with paddle.no_grad():y_pred = model(X).numpy()mse = mean_squared_error(y.numpy(), y_pred)
r2 = r2_score(y.numpy(), y_pred)
print(f"均方誤差 (MSE): {mse}")
print(f"決定系數 (R2): {r2}")# 輸出模型的系數和截距
weights = model[0].weight.numpy()[0][0]
bias = model[0].bias.numpy()[0]
print(f"模型系數: {weights}")
print(f"模型截距: {bias}")

方案 2:單獨定義,使用類的方式?class nn.Layer?組網

代碼解釋

此方案與方案 1 的主要區別在于模型的組網方式,具體如下:

模型組網

① 定義一個繼承自?nn.Layer?的自定義模型類?LinearRegression

② 在?__init__?方法中初始化?nn.Linear?層。

③ 在?forward?方法中定義前向傳播邏輯。

后續步驟

損失函數、優化器的選擇,模型訓練、評估以及參數輸出等步驟與方案 1 基本相同。

import paddle
import paddle.nn as nn
import numpy as np
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.pyplot as plt# 自定義數據集
# 生成 100 個樣本,每個樣本有 1 個特征
X = np.random.rand(100, 1).astype(np.float32)
# 根據特征生成目標值,添加一些噪聲
y = 2 * X + 1 + 0.3 * np.random.randn(100, 1).astype(np.float32)# 將 numpy 數組轉換為 PaddlePaddle 張量
X = paddle.to_tensor(X)
y = paddle.to_tensor(y)# 自定義模型類,繼承自 nn.Layer
class LinearRegression(nn.Layer):def __init__(self):super(LinearRegression, self).__init__()self.linear = nn.Linear(1, 1)def forward(self, x):return self.linear(x)# 創建模型實例
model = LinearRegression()# 定義損失函數和優化器
criterion = nn.MSELoss()
optimizer = paddle.optimizer.SGD(learning_rate=0.01, parameters=model.parameters())# 訓練模型
num_epochs = 1000
losses = []
for epoch in range(num_epochs):# 前向傳播outputs = model(X)loss = criterion(outputs, y)losses.append(loss.numpy()[0])# 反向傳播和優化optimizer.clear_grad()loss.backward()optimizer.step()if (epoch + 1) % 100 == 0:print(f'Epoch [{epoch + 1}/{num_epochs}], Loss: {loss.numpy()[0]:.4f}')# 繪制訓練損失曲線
plt.plot(range(num_epochs), losses)
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.title('Training Loss')
plt.show()# 模型評估
with paddle.no_grad():y_pred = model(X).numpy()mse = mean_squared_error(y.numpy(), y_pred)
r2 = r2_score(y.numpy(), y_pred)
print(f"均方誤差 (MSE): {mse}")
print(f"決定系數 (R2): {r2}")# 輸出模型的系數和截距
weights = model.linear.weight.numpy()[0][0]
bias = model.linear.bias.numpy()[0]
print(f"模型系數: {weights}")
print(f"模型截距: {bias}")

3. 訓練和評估部分

  • 使用?train_losses?列表記錄每一輪訓練的損失值,方便后續繪制訓練損失曲線,直觀觀察模型的訓練過程。
  • 將數據集按 80:20 的比例劃分為訓練集和測試集,以更準確地評估模型的泛化能力。
  • 使用?scikit-learn?中的?mean_squared_error?和?r2_score?計算測試集的均方誤差和決定系數。

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

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

相關文章

pytest執行報錯:found no collectors

今天在嘗試使用pytest運行用例的時候出現報錯:found no collectors;從兩個方向進行排查,一是看文件名和函數名是不是符合規范,命名要是"test_*"格式;二是是否存在修改文件名的情況,如果修改過文件…

mysql-06.JDBC

目錄 什么是JDBC: 為啥存在JDBC: JDBC工作原理: JDBC的優勢: 下載mysql驅動包: 用java程序操作數據庫 1.創建dataSource: 2.與服務端建立連接 3.構造sql語句 4.執行sql 5.關閉連接,釋放資源 參考代碼: 插…

微信小程序wxs實現UTC轉北京時間

微信小程序實現UTC轉北京時間 打臉一刻:最近在迭代原生微信小程序,好一段時間沒寫原生的,有點不習慣; 咦,更新數據咋不生效呢?原來還停留在 this.xxx; 喲,事件又沒反應了&#xff1f…

機器學習-線性回歸(對于f(x;w)=w^Tx+b理解)

一、𝑓(𝒙;𝒘) 𝒘T𝒙的推導 學習線性回歸,我們那先要對于線性回歸的表達公示,有所認識。 我們先假設空間是一組參數化的線性函數: 其中權重向量𝒘 ∈ R𝐷 …

R語言學習筆記之語言入門基礎

一、R語言基礎 快速熟悉R語言中的基本概念&#xff0c;先入個門。 1、運算符 運算符含義例子加1 1-減3 - 2*乘3 * 2/除9 / 3^(**)乘方2 ^ 3 2 ** 3%%取余5 %% 2%/%取整5 %/% 2 2、賦值符號 等號a 1三者等價&#xff1a;把1賦值給變量a左箭頭<?a <- 1右箭頭?&g…

計算機網絡三張表(ARP表、MAC表、路由表)總結

參考&#xff1a; 網絡三張表&#xff1a;ARP表, MAC表, 路由表&#xff0c;實現你的網絡自由&#xff01;&#xff01;_mac表、arp表、路由表-CSDN博客 網絡中的三張表&#xff1a;ARP表、MAC表、路由表 首先要明確一件事&#xff0c;如果一個主機要發送數據&#xff0c;那么必…

【Nomoto 船舶模型】

【Nomoto 船舶模型】 1. Nomoto 船舶模型簡介2. 來源及發展歷程3. 構建 一階模型Nomoto 船舶模型3.1 C 實現3.2 Python 實現3.3 說明 5. 參數辨識方法5.1 基于最小二乘法的參數辨識5.2 數學推導5.3 Python 實現5.4 說明 4. 結論參考文獻 1. Nomoto 船舶模型簡介 Nomoto 模型是…

差分進化算法 (Differential Evolution) 算法詳解及案例分析

差分進化算法 (Differential Evolution) 算法詳解及案例分析 目錄 差分進化算法 (Differential Evolution) 算法詳解及案例分析1. 引言2. 差分進化算法 (DE) 算法原理2.1 基本概念2.2 算法步驟3. 差分進化算法的優勢與局限性3.1 優勢3.2 局限性4. 案例分析4.1 案例1: 單目標優化…

深入理解GPT底層原理--從n-gram到RNN到LSTM/GRU到Transformer/GPT的進化

從簡單的RNN到復雜的LSTM/GRU,再到引入注意力機制,研究者們一直在努力解決序列建模的核心問題。每一步的進展都為下一步的突破奠定了基礎,最終孕育出了革命性的Transformer架構和GPT大模型。 1. 從n-gram到循環神經網絡(RNN)的誕生 1.1 N-gram 模型 在深度學習興起之前,處理…

【JWT】jwt實現HS、RS、ES、ED簽名與驗簽

JWT 實現 HS、RS、ES 和 ED 簽名與驗簽 簽名方式算法密鑰類型簽名要點驗簽要點HSHMAC-SHA256對稱密鑰- 使用 crypto/hmac 和對稱密鑰生成 HMAC 簽名- 將 header.payload 作為數據輸入- 使用同一密鑰重新計算 HMAC 簽名- 比較計算結果與接收到的簽名是否一致RSRSA-SHA256公鑰 …

地址欄信息location

獲取信息 頁面跳轉 location.href當前地址欄信息 location.assign()設置跳轉新的頁面 location.replace() location.reload()刷新頁面

程序員轉型測試:解鎖漏洞挖掘新旅程

前言&#xff1a;哈嘍&#xff0c;大家好&#xff0c;今天給大家分享一篇文章&#xff01;并提供具體代碼幫助大家深入理解&#xff0c;徹底掌握&#xff01;創作不易&#xff0c;如果能幫助到大家或者給大家一些靈感和啟發&#xff0c;歡迎收藏關注哦 &#x1f495; 目錄 程序…

StarRocks常用命令

目錄 1、StarRocks 集群管理&配置命令 2、StarRocks 常用操作命令 3、StarRocks 數據導入和導出 1、StarRocks 集群管理&配置命令 查詢 FE 節點信息 SHOW frontends; SHOW PROC /frontends; mysql -h192.168.1.250 -P9030 -uroot -p -e "SHOW PROC /dbs;"…

08-ArcGIS For JavaScript-通過Mesh繪制幾何體(Cylinder,Circle,Box,Pyramid)

目錄 概述代碼實現1、Mesh.createBox2、createPyramid3、Mesh.createSphere4、Mesh.createCylinder 完整代碼 概述 對于三維場景而言&#xff0c;二位的點、線、面&#xff0c;三維的圓、立方體、圓柱等都是比較常見的三維對象&#xff0c;在ArcGIS For JavaScript中我們知道點…

Linux中page、buffer_head、bio的關系

在Linux中&#xff0c;page、buffer_head、bio這三個概念緊密相關&#xff0c;共同構成了塊設備I/O和內存管理的重要部分&#xff0c;它們的聯系主要體現在以下方面&#xff1a; page與buffer_head 基于page構建&#xff1a;buffer_head通常是基于page來構建的&#xff0c;一…

直線擬合例子 ,嶺回歸擬合直線

目錄 直線擬合,算出離群點 嶺回歸擬合直線&#xff1a; 直線擬合,算出離群點 import cv2 import numpy as np# 輸入的點 points np.array([[51, 149],[122, 374],[225, 376],[340, 382],[463, 391],[535, 298],[596, 400],[689, 406],[821, 407] ], dtypenp.float32)# 使用…

SpringCloud兩種注冊中心

SpringCloud 基本概念 系統架構 我們之前做的所有的項目都屬于單體架構&#xff0c;下面我們將要學習更適合大型項目的分布式架構 單體架構&#xff1a; 將業務的所有功能幾種在一個項目中開發&#xff0c;打成一個包部署。 優點&#xff1a;架構簡單、部署成本低 缺點&am…

SpringAI 搭建智能體(二):搭建客服系統智能體

在現代人工智能應用中&#xff0c;智能體&#xff08;Agent&#xff09; 是一個重要的概念&#xff0c;它的核心能力是自主性與靈活性。一個智能體不僅能夠理解用戶的需求&#xff0c;還能拆解任務、調用工具完成具體操作&#xff0c;并在復雜場景中高效運行。在本篇博客中&…

SVN客戶端使用手冊

目錄 一、簡介 二、SVN的安裝與卸載 1. 安裝&#xff08;公司內部一般會提供安裝包和漢化包&#xff0c;直接到公司內部網盤下載即可&#xff0c;如果找不到可以看下面的教程&#xff09; 2. 查看SVN版本 ?編輯 3. SVN卸載 三、SVN的基本操作 1. 檢出 2. 清除認證數據 3. 提交…

HTML 文本格式化詳解

在網頁開發中&#xff0c;文本內容的呈現方式直接影響用戶的閱讀體驗。HTML 提供了多種文本格式化元素&#xff0c;可以幫助我們更好地控制文本的顯示效果。本文將詳細介紹 HTML 中的文本格式化元素及其使用方法&#xff0c;幫助你輕松實現網頁文本的美化。 什么是 HTML 文本格…