(三)動手學線性神經網絡:從數學原理到代碼實現

1 線性回歸

線性回歸是一種基本的預測模型,用于根據輸入特征預測連續的輸出值。它是機器學習和深度學習中最簡單的模型之一,但卻是理解更復雜模型的基礎。

1.1 線性回歸的基本元素

概念理解
線性回歸假設輸入特征和輸出之間存在線性關系。具體來說,假設有一個輸入特征向量 x x x 和一個目標值 y y y,線性回歸模型的目標是找到一個線性函數 f ( x ) f(x) f(x) ,使得 f ( x ) f(x) f(x)盡可能接近 y y y

線性回歸模型的基本形式為:
y ^ = X w + b \hat{y} = Xw + b y^?=Xw+b
其中:

  • X X X是輸入特征矩陣,每一行表示一個樣本,每一列表示一個特征。
  • w w w 是權重向量,表示每個特征的權重。
  • b b b是偏置項,是一個標量,用于調整模型的整體偏移。
  • y ^ \hat{y} y^? 是預測值,是一個向量,表示每個樣本的預測結果。

代碼示例
假設我們有一個簡單的線性回歸問題,輸入特征是一個一維向量 X X X,目標值是一個標量 y y y

import numpy as np
import matplotlib.pyplot as plt# 生成數據
np.random.seed(42)
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)# 繪制數據
plt.scatter(X, y)
plt.xlabel('X')
plt.ylabel('y')
plt.title('Generated Data')
plt.show()
1.2 向量化加速

概念理解
向量化是一種利用矩陣和數組操作來替換顯式循環的技術。它可以顯著提高代碼的執行效率,尤其是在現代硬件(如GPU)上。在深度學習中,向量化操作是構建高效模型的關鍵。

代碼示例
在上述數據生成代碼中,我們使用了 NumPy 的向量化操作來生成數據。這種操作比使用循環生成數據要快得多。

1.3 正態分布與平方損失

概念理解
線性回歸通常假設誤差項(即真實值與預測值之間的差異)服從正態分布。因此,線性回歸常用的損失函數是均方誤差(MSE),它衡量了預測值與真實值之間的平方誤差。

均方誤差的公式為:
[ \text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 ]
其中:

  • ( y_i ) 是第 ( i ) 個樣本的真實值。
  • ( \hat{y}_i ) 是第 ( i ) 個樣本的預測值。
  • ( n ) 是樣本總數。

代碼示例
定義均方誤差損失函數。

def mean_squared_error(y_true, y_pred):return ((y_true - y_pred) ** 2).mean()# 測試損失函數
y_true = np.array([3, 2, 4, 5])
y_pred = np.array([2.5, 2, 4, 5.5])
mse = mean_squared_error(y_true, y_pred)
print(f'Mean Squared Error: {mse}')
1.4 從線性回歸到深度網絡

概念理解
線性回歸是深度學習的一個特例,其中網絡僅包含一個線性層。深度學習模型通過堆疊多個線性層和非線性激活函數來處理更復雜的數據。這些非線性激活函數(如 ReLU、Sigmoid)使得模型能夠學習數據中的非線性關系。

代碼示例
構建一個簡單的深度神經網絡模型(包含一個隱藏層)。

import torch
import torch.nn as nn# 定義模型
class SimpleNN(nn.Module):def __init__(self):super(SimpleNN, self).__init__()self.linear1 = nn.Linear(1, 10)  # 輸入特征維度為1,隱藏層維度為10self.relu = nn.ReLU()self.linear2 = nn.Linear(10, 1)  # 輸出維度為1def forward(self, x):x = self.linear1(x)x = self.relu(x)x = self.linear2(x)return x# 實例化模型
model = SimpleNN()# 打印模型結構
print(model)
1.5 訓練線性回歸模型

概念理解
訓練線性回歸模型的目標是找到最優的權重 w w w和偏置 b b b,使得損失函數(如均方誤差)最小。這通常通過優化算法(如梯度下降法)來實現。

代碼示例
訓練一個簡單的線性回歸模型。

import torch.optim as optim# 轉換數據為張量
X_tensor = torch.from_numpy(X).float()
y_tensor = torch.from_numpy(y).float()# 定義模型
model = nn.Linear(1, 1)# 定義損失函數和優化器
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)# 訓練模型
num_epochs = 1000
for epoch in range(num_epochs):# 前向傳播y_pred = model(X_tensor)loss = criterion(y_pred, y_tensor)# 反向傳播optimizer.zero_grad()loss.backward()optimizer.step()if (epoch + 1) % 100 == 0:print(f'Epoch {epoch + 1}, Loss: {loss.item():.4f}')# 打印訓練后的參數
print(f'Estimated weight: {model.weight.item():.2f}, Estimated bias: {model.bias.item():.2f}')
1.6 模型評估

概念理解
評估線性回歸模型的性能通常使用均方誤差(MSE)或其他回歸指標(如均方根誤差 RMSE、平均絕對誤差 MAE)。

代碼示例
評估訓練后的模型性能。

# 使用訓練后的模型進行預測
y_pred = model(X_tensor).detach().numpy()# 計算均方誤差
mse = mean_squared_error(y, y_pred)
print(f'Mean Squared Error: {mse:.4f}')# 繪制真實值和預測值
plt.scatter(X, y, color='blue', label='True data')
plt.plot(X, y_pred, color='red', linewidth=2, label='Fitted line')
plt.xlabel('X')
plt.ylabel('y')
plt.title('Linear Regression')
plt.legend()
plt.show()

通過上述步驟,你可以從理論和實踐兩個方面理解線性回歸模型。線性回歸是深度學習的基礎,掌握它有助于你更好地理解和構建更復雜的神經網絡模型。

2 線性回歸的從零開始實現

2.1 生成數據集

首先生成一個簡單的模擬數據集用于訓練和測試我們的線性回歸模型。我們假設真實模型是 y = 4 + 3 X y= 4 + 3X y=4+3X + 噪聲 ,其中噪聲服從正態分布。

import numpy as np# 設置隨機種子以確保結果可復現
np.random.seed(42)# 生成訓練數據
X_train = 2 * np.random.rand(100, 1)  # 特征
y_train = 4 + 3 * X_train + np.random.randn(100, 1)  # 目標值,包含噪聲# 生成測試數據
X_test = 2 * np.random.rand(20, 1)
y_test = 4 + 3 * X_test + np.random.randn(20, 1)

2.2 數據預處理

在訓練模型之前,通常需要對數據進行預處理。在這里,我們將數據轉換為適合進行矩陣運算的形式。

# 數據預處理:將數據轉換為矩陣形式
X_train = np.hstack((np.ones((X_train.shape[0], 1)), X_train))  # 添加偏置項
X_test = np.hstack((np.ones((X_test.shape[0], 1)), X_test))

2.3 初始化模型參數

初始化線性回歸模型的權重向量。在我們這個簡單例子中,權重向量包含偏置項和特征的系數。

# 初始化權重向量(包括偏置項)
theta = np.random.randn(2, 1)  # 2行1列,對應偏置和一個特征的權重

2.4 定義模型

定義線性回歸模型的正向傳播過程。這一步就是根據當前的權重向量計算預測值。

# 定義線性回歸模型
def linear_regression(X, theta):return X.dot(theta)

2.5 定義損失函數

選擇均方誤差(MSE)作為損失函數,它衡量了預測值與真實值之間的差異。

# 定義均方誤差損失函數
def mean_squared_error(y_true, y_pred):return np.mean((y_true - y_pred) ** 2)

2.6 定義優化算法

使用小批量隨機梯度下降法(Mini-batch Gradient Descent)來優化模型參數。我們手動計算梯度并更新參數。

# 定義小批量隨機梯度下降法
def minibatch_gradient_descent(X, y, theta, learning_rate, epochs, batch_size):m = len(y)for epoch in range(epochs):# 打亂數據indices = np.arange(m)np.random.shuffle(indices)X_shuffled = X[indices]y_shuffled = y[indices]# 分成小批次for i in range(0, m, batch_size):X_batch = X_shuffled[i:i+batch_size]y_batch = y_shuffled[i:i+batch_size]# 正向傳播y_pred = linear_regression(X_batch, theta)# 計算梯度gradient = (2 / batch_size) * X_batch.T.dot(y_pred - y_batch)# 更新參數theta -= learning_rate * gradient# 每隔一定迭代次數打印損失if epoch % 100 == 0:y_pred = linear_regression(X, theta)loss = mean_squared_error(y, y_pred)print(f'Epoch {epoch}, Loss: {loss}')return theta

2.7 訓練模型

現在開始訓練模型,使用我們剛才定義的梯度下降法來優化模型參數。

# 設置超參數
learning_rate = 0.01
epochs = 1000
batch_size = 10# 訓練模型
theta = minibatch_gradient_descent(X_train, y_train, theta, learning_rate, epochs, batch_size)# 輸出最終的模型參數
print(f'Estimated parameters: {theta.flatten()}')

2.8 模型評估

訓練完成后,我們對模型進行評估,看看它在測試集上的表現。

# 在測試集上進行預測
y_test_pred = linear_regression(X_test, theta)# 計算測試集上的損失
test_loss = mean_squared_error(y_test, y_test_pred)
print(f'Test Loss: {test_loss}')# 可視化結果
import matplotlib.pyplot as plt# 繪制訓練數據和測試數據
plt.scatter(X_train[:, 1], y_train, label='Training Data')
plt.scatter(X_test[:, 1], y_test, label='Test Data')# 繪制預測線
X_plot = np.linspace(0, 2, 100).reshape(-1, 1)
X_plot = np.hstack((np.ones((X_plot.shape[0], 1)), X_plot))
y_plot_pred = linear_regression(X_plot, theta)
plt.plot(X_plot[:, 1], y_plot_pred, color='red', label='Fitted Line')plt.xlabel('X')
plt.ylabel('y')
plt.title('Linear Regression from Scratch')
plt.legend()
plt.show()

3 線性回歸的簡潔實現

將使用PyTorch的高級API來實現線性回歸模型。這種方法更加簡潔,利用了PyTorch的內置功能,減少了代碼量并提高了開發效率。

3.1 生成數據集

我們繼續使用之前生成的數據,但如果需要重新生成,可以使用以下代碼:

import numpy as np
import torch
from torch.utils.data import TensorDataset, DataLoader# 生成數據集
np.random.seed(42)
X = 2 * np.random.rand(100, 1)  # 100個樣本,每個樣本1個特征
y = 4 + 3 * X + np.random.randn(100, 1)  # 真實模型 y = 3x + 4 加上一些噪聲# 轉換為張量
X_tensor = torch.from_numpy(X).float()
y_tensor = torch.from_numpy(y).float()# 創建數據集和數據加載器
dataset = TensorDataset(X_tensor, y_tensor)
data_loader = DataLoader(dataset, batch_size=10, shuffle=True)
3.2 定義模型

使用PyTorch的 nn.Linear 來定義線性回歸模型:

import torch.nn as nn# 定義模型
model = nn.Linear(1, 1)  # 輸入特征維度為1,輸出維度為1
3.3 初始化模型參數

初始化模型的權重和偏置:

# 初始化參數
nn.init.normal_(model.weight, mean=0, std=0.01)
nn.init.zeros_(model.bias)
3.4 定義損失函數

使用PyTorch內置的均方誤差損失函數:

# 定義損失函數
loss_fn = nn.MSELoss()
3.5 定義優化算法

使用PyTorch的 torch.optim 模塊來定義優化器:

# 定義優化算法
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
3.6 訓練模型

訓練模型并評估性能:

# 訓練模型
num_epochs = 100
for epoch in range(num_epochs):for X_batch, y_batch in data_loader:# 前向傳播y_pred = model(X_batch)loss = loss_fn(y_pred, y_batch)# 反向傳播optimizer.zero_grad()loss.backward()optimizer.step()if (epoch + 1) % 10 == 0:print(f'Epoch {epoch + 1}, Loss: {loss.item():.4f}')print(f'Estimated weight: {model.weight.item():.2f}, Estimated bias: {model.bias.item():.2f}')
3.7 模型評估

評估訓練后的模型性能,并繪制預測結果:

import matplotlib.pyplot as plt# 使用訓練后的模型進行預測
X_new = torch.tensor([[0], [2]]).float()
y_predict = model(X_new).detach().numpy()# 繪制數據和預測結果
plt.scatter(X, y, color='blue', label='True data')
plt.plot(X_new.numpy(), y_predict, color='red', linewidth=2, label='Fitted line')
plt.xlabel('X')
plt.ylabel('y')
plt.title('Linear Regression')
plt.legend()
plt.show()
3.8 完整代碼

將上述代碼整合在一起,可以直接運行以下代碼來實現線性回歸模型的簡潔版:

import numpy as np
import torch
import torch.nn as nn
from torch.utils.data import TensorDataset, DataLoader
import matplotlib.pyplot as plt# 生成數據集
np.random.seed(42)
X = 2 * np.random.rand(100, 1)  # 100個樣本,每個樣本1個特征
y = 4 + 3 * X + np.random.randn(100, 1)  # 真實模型 y = 3x + 4 加上一些噪聲# 轉換為張量
X_tensor = torch.from_numpy(X).float()
y_tensor = torch.from_numpy(y).float()# 創建數據集和數據加載器
dataset = TensorDataset(X_tensor, y_tensor)
data_loader = DataLoader(dataset, batch_size=10, shuffle=True)# 定義模型
model = nn.Linear(1, 1)  # 輸入特征維度為1,輸出維度為1# 初始化參數
nn.init.normal_(model.weight, mean=0, std=0.01)
nn.init.zeros_(model.bias)# 定義損失函數
loss_fn = nn.MSELoss()# 定義優化算法
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)# 訓練模型
num_epochs = 100
for epoch in range(num_epochs):for X_batch, y_batch in data_loader:# 前向傳播y_pred = model(X_batch)loss = loss_fn(y_pred, y_batch)# 反向傳播optimizer.zero_grad()loss.backward()optimizer.step()if (epoch + 1) % 10 == 0:print(f'Epoch {epoch + 1}, Loss: {loss.item():.4f}')print(f'Estimated weight: {model.weight.item():.2f}, Estimated bias: {model.bias.item():.2f}')# 使用訓練后的模型進行預測
X_new = torch.tensor([[0], [2]]).float()
y_predict = model(X_new).detach().numpy()# 繪制數據和預測結果
plt.scatter(X, y, color='blue', label='True data')
plt.plot(X_new.numpy(), y_predict, color='red', linewidth=2, label='Fitted line')
plt.xlabel('X')
plt.ylabel('y')
plt.title('Linear Regression')
plt.legend()
plt.show()
概念理解
  • 簡潔實現:使用PyTorch的高級API(如 nn.Lineartorch.optim)可以大大減少代碼量,提高開發效率。
  • 模型定義nn.Linear 是PyTorch中定義線性層的模塊,自動管理權重和偏置。
  • 損失函數:使用PyTorch內置的 MSELoss,無需手動定義。
  • 優化器:使用PyTorch的 torch.optim 模塊中的優化器(如SGD),自動更新模型參數。
  • 訓練過程:通過循環調用 DataLoader,自動處理數據的分批和隨機打亂。

通過這種簡潔實現,你可以更高效地構建和訓練線性回歸模型,同時利用PyTorch的強大功能來處理復雜的任務。

4 softmax回歸

Softmax回歸是用于多分類問題的線性模型。它通過Softmax函數將線性回歸的輸出轉換為概率分布,從而實現多類分類。

4.1 Softmax回歸的基本概念

概念理解
Softmax回歸適用于多分類問題,其中目標值是離散的類別。模型通過學習輸入特征和類別之間的關系,預測每個類別的概率。

Softmax回歸的模型形式為:
y ^ \hat{y} y^?= s o f t m a x softmax softmax( X W + b XW + \mathbf{b} XW+b)
其中:

  • X X X 是輸入特征矩陣。
  • W W W 是權重矩陣,每一列對應一個類別的權重向量。
  • b \mathbf{b} b 是偏置向量,每個元素對應一個類別的偏置。
  • y ^ \hat{y} y^? 是預測的類別概率分布。

Softmax函數的定義為:
softmax ( z ) i \text{softmax}(\mathbf{z})_i softmax(z)i? = exp ? ( z i ) ∑ j = 1 K exp ? ( z j ) \frac{\exp(z_i)}{\sum_{j = 1}^{K} \exp(z_j)} j=1K?exp(zj?)exp(zi?)?
其中:

  • z z z 是線性回歸的輸出。
  • K K K 是類別的總數。
  • softmax ( z ) i ) \text{softmax}(\mathbf{z})_i) softmax(z)i?) 是第 i i i 個類別的概率。
4.2 Softmax回歸的從零開始實現
4.2.1 生成數據集

為了演示,我們生成一個簡單的多分類數據集,假設是一個三分類問題。

import numpy as np
import matplotlib.pyplot as plt# 生成數據集
np.random.seed(42)
X = np.random.rand(300, 2)
y = np.random.randint(0, 3, 300)# 繪制數據
plt.scatter(X[y == 0][:, 0], X[y == 0][:, 1], color='red', label='Class 0')
plt.scatter(X[y == 1][:, 0], X[y == 1][:, 1], color='blue', label='Class 1')
plt.scatter(X[y == 2][:, 0], X[y == 2][:, 1], color='green', label='Class 2')
plt.xlabel('X1')
plt.ylabel('X2')
plt.title('Generated Data')
plt.legend()
plt.show()
4.2.2 定義Softmax函數

Softmax函數將線性回歸的輸出轉換為概率分布。

def softmax(z):exp_z = np.exp(z - np.max(z, axis=1, keepdims=True))  # 防止數值溢出return exp_z / np.sum(exp_z, axis=1, keepdims=True)
4.2.3 定義模型

Softmax回歸模型的前向傳播。

def model(X, W, b):return softmax(X @ W + b)
4.2.4 定義損失函數

Softmax回歸使用交叉熵損失函數。

def cross_entropy_loss(y_pred, y_true):return -np.mean(np.log(y_pred[np.arange(len(y_true)), y_true]))
4.2.5 定義優化算法

使用隨機梯度下降法更新模型參數。

def gradient_descent(X, y, W, b, learning_rate):y_pred = model(X, W, b)loss = cross_entropy_loss(y_pred, y)# 計算梯度m = len(X)y_one_hot = np.eye(3)[y]  # 將標簽轉換為one-hot編碼dW = X.T @ (y_pred - y_one_hot) / mdb = np.sum(y_pred - y_one_hot, axis=0) / m# 更新參數W -= learning_rate * dWb -= learning_rate * dbreturn loss
4.2.6 訓練模型

訓練Softmax回歸模型。

# 初始化參數
W = np.random.randn(2, 3)
b = np.zeros(3)# 訓練參數
learning_rate = 0.1
num_epochs = 100# 訓練過程
losses = []
for epoch in range(num_epochs):loss = gradient_descent(X, y, W, b, learning_rate)losses.append(loss)if (epoch + 1) % 10 == 0:print(f'Epoch {epoch + 1}, Loss: {loss:.4f}')# 繪制損失曲線
plt.plot(losses)
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.title('Loss Curve')
plt.show()
4.3 Softmax回歸的簡潔實現

使用PyTorch的高級API來實現Softmax回歸,更加簡潔高效。

4.3.1 定義模型

使用PyTorch的 nn.Linearnn.Softmax 定義模型。

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import TensorDataset, DataLoader# 轉換為張量
X_tensor = torch.tensor(X, dtype=torch.float32)
y_tensor = torch.tensor(y, dtype=torch.long)# 創建數據集和數據加載器
dataset = TensorDataset(X_tensor, y_tensor)
data_loader = DataLoader(dataset, batch_size=32, shuffle=True)# 定義模型
model = nn.Sequential(nn.Linear(2, 3),  # 輸入特征維度為2,輸出類別數為3nn.Softmax(dim=1)  # 對輸出應用Softmax函數
)# 定義損失函數和優化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.1)
4.3.2 訓練模型

訓練Softmax回歸模型。

# 訓練模型
num_epochs = 100
losses = []for epoch in range(num_epochs):for X_batch, y_batch in data_loader:# 前向傳播y_pred = model(X_batch)loss = criterion(y_pred, y_batch)# 反向傳播optimizer.zero_grad()loss.backward()optimizer.step()losses.append(loss.item())if (epoch + 1) % 10 == 0:print(f'Epoch {epoch + 1}, Loss: {loss.item():.4f}')# 繪制損失曲線
plt.plot(losses)
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.title('Loss Curve')
plt.show()
4.4 模型評估

評估訓練后的模型性能,計算準確率。

# 計算準確率
model.eval()  # 設置為評估模式
with torch.no_grad():y_pred = model(X_tensor)_, predicted = torch.max(y_pred, 1)accuracy = (predicted == y_tensor).sum().item() / len(y_tensor)print(f'Accuracy: {accuracy * 100:.2f}%')
4.5 完整代碼

將上述代碼整合在一起,可以直接運行以下代碼來實現Softmax回歸模型的簡潔版:

import numpy as np
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import TensorDataset, DataLoader
import matplotlib.pyplot as plt### 生成數據集
np.random.seed(42)
X = np.random.rand(300, 2)
y = np.random.randint(0, 3, 300)### 轉換為張量
X_tensor = torch.tensor(X, dtype=torch.float32)
y_tensor = torch.tensor(y, dtype=torch.long)### 創建數據集和數據加載器
dataset = TensorDataset(X_tensor, y_tensor)
data_loader = DataLoader(dataset, batch_size=32, shuffle=True)### 定義模型
model = nn.Sequential(nn.Linear(2, 3),  # 輸入特征維度為2,輸出類別數為3nn.Softmax(dim=1)  # 對輸出應用Softmax函數
)### 定義損失函數和優化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.1)### 訓練模型
num_epochs = 100
losses = []for epoch in range(num_epochs):for X_batch, y_batch in data_loader:# 前向傳播y_pred = model(X_batch)loss = criterion(y_pred, y_batch)# 反向傳播optimizer.zero_grad()loss.backward()optimizer.step()losses.append(loss.item())if (epoch + 1) % 10 == 0:print(f'Epoch {epoch + 1}, Loss: {loss.item():.4f}')### 繪制損失曲線
plt.plot(losses)
plt

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

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

相關文章

二十五、面向對象底層邏輯-SpringMVC九大組件之HandlerMapping接口設計

一、引言:MVC架構的交通樞紐 在Spring MVC框架中,HandlerMapping接口扮演著"請求導航儀"的關鍵角色,它決定了HTTP請求如何被路由到對應的Controller處理器。作為MVC模式的核心組件之一,HandlerMapping在請求處理的生命…

凌晨四點的星光

凌晨四點的城市像臺停止運轉的老舊機器,陳明裹緊外套踩著路燈的殘影往家走。鍵盤敲擊聲仿佛還在耳邊回響,他揉了揉酸澀的眼睛,手機屏幕突然亮起,是妻子發來的消息:“孩子又發燒了,我帶他去醫院。” 這是他…

Kyosan K5BMC ELECTRONIC INTERLOCKING MANUAL 電子聯鎖

Kyosan K5BMC ELECTRONIC INTERLOCKING MANUAL 電子聯鎖

LeetCode 熱題 100 74. 搜索二維矩陣

LeetCode 熱題 100 | 74. 搜索二維矩陣 大家好,今天我們來解決一道經典的算法題——搜索二維矩陣。這道題在 LeetCode 上被標記為中等難度,要求我們在一個滿足特定條件的二維矩陣中查找一個目標值。如果目標值在矩陣中,返回 true&#xff1b…

如何在 HTML 中添加按鈕

原文:如何在 HTML 中添加按鈕 | w3cschool筆記 (請勿將文章標記為付費!!!!) 在網頁開發中,按鈕是用戶界面中不可或缺的元素之一。無論是用于提交表單、觸發動作還是導航&#xff0…

一篇文章實現Android圖片拼接并保存至相冊

系列文章目錄 一篇文章實現Android圖片拼接并保存至相冊 文章目錄 系列文章目錄前言實現功能類定義和成員變量onCreate方法權限檢查和圖片選擇處理選擇的圖片圖片拼接功能圖片保存功能 使用ImageStitcher類拼接圖片代碼解釋:ImageStitcher.java類定義和方法計算拼接…

2025.06.06【Ribo-seq】|riboWaltz:P-site定位與三堿基周期性分析流程

文章目錄 一、前言二、riboWaltz簡介三、安裝與依賴四、分析流程總覽1. 數據準備2. 典型分析流程2.1 讀取注釋和BAM2.2 P-site定位2.3 三堿基周期性與元分析2.4 密碼子使用偏好分析 五、可視化與結果解讀六、常見問題與注意事項七、實戰經驗與建議八、參考資料九、結語 一、前言…

思維鏈的 內部機制和簡單理解

思維鏈的 內部機制和簡單理解 思維鏈是對解決問題的步驟進行規劃,規劃后將作為上下文 在LLM中繼續輸出。因為Transform都是一個一個單詞生成,沒新生成一個單詞都會將新生的作為上下文。 可以這么理解,但更準確的簡化描述是: 思維鏈是讓模型在回答問題時,先“內部生成”或…

Charles 全流程指南:安裝、設置、抓包與注意事項

Charles 是一款功能強大的網絡抓包工具,支持 HTTP/HTTPS 流量監控、請求/響應分析、斷點調試等功能。本文將從安裝到實戰抓包,提供完整流程及關鍵注意事項。 一、安裝 Charles 官網下載:訪問 Charles 官網,選擇對應系統版本&…

全球長序列高分辨率光合有效輻射(PAR)(1984-2018)

時間分辨率:時空間分辨率:1km - 10km共享方式:開放獲取數據大小:188.92 GB數據時間范圍:1984-01-01 — 2018-12-31元數據更新時間:2022-04-29 數據集摘要 本數據集是一個包含接近35年(1984-201…

【Zephyr 系列 11】使用 NVS 實現 BLE 參數持久化:掉電不丟配置,開機自動加載

??關鍵詞:Zephyr、NVS、非易失存儲、掉電保持、Flash、AT命令保存、配置管理 ??目標讀者:希望在 BLE 模塊中實現掉電不丟配置、支持產測參數注入與自動加載功能的開發者 ??文章長度:約 5200 字 ?? 為什么要使用 NVS? 在實際產品中,我們經常面臨以下場景: 用戶或…

解鎖Java線程池:性能優化的關鍵

一、引言 在 Java 并發編程的世界里,線程池是一個至關重要的概念。簡單來說,線程池就是一個可以復用線程的 “池子”,它維護著一組線程,這些線程可以被重復使用來執行多個任務,而不是為每個任務都創建一個新的線程。?…

一站式直播工具:助力內容創作者高效開啟直播新時代

近年來,隨著互聯網技術的不斷進步和短視頻、直播行業的爆發式增長,越來越多的企業和個人投入到直播電商、互動娛樂、在線教育等場景。直播運營過程中,涉及到數據統計、彈幕互動、流程自動化、內容同步等諸多環節。如何提升運營效率、減少人工…

數論——同余問題全家桶3 __int128和同余方程組

數論——同余問題全家桶3 __int128和同余方程組 快速讀寫和__int128快速讀寫__int128 中國剩余定理和線性同余方程組中國剩余定理(CRT)中國剩余定理OJ示例模板題曹沖養豬 - 洛谷模板題猜數字 - 洛谷 擴展中國剩余定理擴展中國剩余定理OJ示例模板題擴展中國剩余定理(…

Python爬蟲實戰:研究MechanicalSoup庫相關技術

一、MechanicalSoup 庫概述 1.1 庫簡介 MechanicalSoup 是一個 Python 庫,專為自動化交互網站而設計。它結合了 requests 的 HTTP 請求能力和 BeautifulSoup 的 HTML 解析能力,提供了直觀的 API,讓我們可以像人類用戶一樣瀏覽網頁、填寫表單和提交請求。 1.2 主要功能特點…

祝?高考加油

以下是極為詳細的高考注意事項清單,涵蓋考前、考中、考后全流程,建議逐條核對: 一、考前準備 1. 證件與物品 必帶清單: 準考證:打印2份(1份備用),塑封或夾在透明文件袋中防皺濕。身…

學習路之PHP--webman安裝及使用、webman/admin安裝

學習路之PHP--webman安裝及使用、webman/admin安裝 一、安裝webman二、運行三、安裝webman/admin四、效果五、配置Nginx反向代理(生產環境:可選)六、win10運行問題集七、使用 一、安裝webman 準備: PHP > 8.1 Composer > 2…

mamba架構和transformer區別

Mamba 架構和 Transformer 架構存在多方面的區別,具體如下: 計算復雜度1 Transformer:自注意力機制的計算量會隨著上下文長度的增加呈平方級增長,例如上下文增加 32 倍時,計算量可能增長 1000 倍,在處理長序…

Python爬蟲實戰:研究mechanize庫相關技術

1. 引言 隨著互聯網數據量的爆炸式增長,網絡爬蟲已成為數據采集和信息挖掘的重要工具。Python 作為一種功能強大且易于學習的編程語言,擁有豐富的爬蟲相關庫,如 Requests、BeautifulSoup、Scrapy 等。Mechanize 庫作為其中的一員,特別擅長處理復雜的表單提交和會話管理,為…

如何使用索引和條件批量更改Series數據

視頻演示 如何通過索引與布爾條件修改 pandas Series?實操演示來了 一、前言:掌握Series數據修改是數據處理的基礎 在使用Python進行數據分析時,Pandas庫的Series對象是最常用的結構之一。在上一個視頻中我們已經學習了如何創建Series對象&a…