当前位置: 首页 > news >正文

机理模型与数据模型融合的方式

机理模型与数据模型的融合旨在结合两者的优势,以提供更准确、可靠的预测和决策支持。以下是几种常见的融合方式及其示例:

1. 特征增强(Feature Augmentation)

描述:将由机理模型计算得到的结果作为额外特征加入到数据模型中。

示例:在风电场发电量预测的例子中,可以使用贝茨理论计算出的理论发电量作为一个新特征添加到包含风速、温度等环境变量的数据集中。然后,使用这些增强后的特征训练机器学习模型,如随机森林或神经网络模型。

特征增强(Feature Augmentation)在风电场发电量预测中的应用

背景介绍

风电场的发电量受到多种因素的影响,包括但不限于风速、温度、空气密度等。尽管这些环境变量可以直接测量并用作模型输入,但它们与发电量之间的关系往往是复杂的非线性关系。通过引入基于物理定律计算出的理论发电量作为额外特征,可以为数据驱动模型提供更丰富的信息,从而提高预测精度。

在这个案例中,我们将使用贝茨理论(Betz Limit)来计算风电场的理论发电量,并将其作为一个新的特征添加到数据集中。然后,我们使用增强后的数据集训练一个简单的神经网络模型来进行发电量预测。

实现步骤

  1. 定义机理模型:根据贝茨理论计算风电场的理论发电量。
  2. 准备数据集:创建一个包含风速、温度等环境变量的数据集,并使用机理模型计算理论发电量。
  3. 构建和训练神经网络模型:使用PyTorch构建神经网络模型,并利用增强后的数据集进行训练。

代码实现

import numpy as np
import torch
import torch.nn as nn
import torch.optim as optim
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler# 假设我们有一个包含风速、温度等环境变量的数据集
np.random.seed(42)
data_size = 1000
wind_speed = np.random.uniform(3, 25, data_size)  # 风速 m/s
temperature = np.random.uniform(-10, 30, data_size)  # 温度 °C
air_density = 1.225 * (1 - 0.0065 * temperature / (temperature + 273.15))  # 空气密度 kg/m^3
actual_power_output = wind_speed ** 3 * np.random.uniform(0.2, 0.4, data_size)  # 实际发电量 kW# 根据贝茨理论计算理论发电量 P = 0.5 * rho * A * v^3 * Cp
blade_radius = 50  # 叶片半径 m
swept_area = np.pi * blade_radius ** 2  # 扫掠面积 m^2
cp_max = 0.593  # 贝茨极限效率
theoretical_power_output = 0.5 * air_density * swept_area * wind_speed ** 3 * cp_max  # 理论发电量 kW# 准备数据集
X = np.column_stack((wind_speed, temperature, theoretical_power_output))  # 包含理论发电量作为新特征
y = actual_power_output# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)# 将numpy数组转换为torch tensor
X_train_torch = torch.tensor(X_train, dtype=torch.float32)
y_train_torch = torch.tensor(y_train, dtype=torch.float32).view(-1, 1)
X_test_torch = torch.tensor(X_test, dtype=torch.float32)
y_test_torch = torch.tensor(y_test, dtype=torch.float32).view(-1, 1)# 构建神经网络模型
class PowerPredictionModel(nn.Module):def __init__(self):super(PowerPredictionModel, self).__init__()self.fc1 = nn.Linear(3, 64)self.fc2 = nn.Linear(64, 64)self.fc3 = nn.Linear(64, 1)def forward(self, x):x = torch.relu(self.fc1(x))x = torch.relu(self.fc2(x))return self.fc3(x)model = PowerPredictionModel()
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)# 训练模型
epochs = 1000
for epoch in range(epochs):optimizer.zero_grad()outputs = model(X_train_torch)loss = criterion(outputs, y_train_torch)loss.backward()optimizer.step()if (epoch+1) % 100 == 0:print(f'Epoch [{epoch+1}/{epochs}], Loss: {loss.item():.4f}')# 测试模型
model.eval()
with torch.no_grad():predictions = model(X_test_torch)test_loss = criterion(predictions, y_test_torch)print(f'Test Loss: {test_loss.item():.4f}')# 绘制结果
import matplotlib.pyplot as pltplt.scatter(y_test, predictions.numpy())
plt.xlabel('Actual Power Output (kW)')
plt.ylabel('Predicted Power Output (kW)')
plt.title('Actual vs Predicted Power Output')
plt.plot([min(y_test), max(y_test)], [min(y_test), max(y_test)], color='red')  # 对角线
plt.show()

解释

  • 数据生成:我们首先生成了一个包含风速、温度等环境变量的随机数据集,并根据这些变量计算了实际发电量和理论发电量。这里假设实际发电量与风速的三次方成正比,系数在0.2到0.4之间变化,以模拟不同条件下的发电效率。

  • 特征增强:将由贝茨理论计算得出的理论发电量作为一个新的特征添加到数据集中。这样做的目的是为了给机器学习模型提供更多关于发电过程的信息,帮助其更好地理解输入特征与输出目标之间的关系。

  • 模型构建:使用PyTorch构建了一个简单的三层全连接神经网络模型,用于预测风电场的实际发电量。该模型包括两个隐藏层,每层有64个神经元,激活函数使用ReLU。

  • 训练与评估:对模型进行了1000次迭代的训练,并每隔100次打印一次损失值。最后,在测试集上评估了模型的性能,并绘制了实际值与预测值的对比图。

这种方法不仅结合了物理原理提供的先验知识,还利用了数据驱动的方法来捕捉复杂模式,从而提高了模型的预测能力。这对于解决实际工程问题具有重要意义。

2. 残差修正(Residual Correction)

描述:首先使用机理模型进行初步预测,然后利用数据模型对预测误差(即残差)进行建模和修正。

示例:假设有一个用于预测化工反应产物浓度的机理模型。该模型可能由于某些未被充分理解的因素而存在系统性偏差。可以通过收集实际产物浓度的历史数据,并使用回归分析或其他统计方法来构建一个修正模型,专门用来调整原始机理模型的输出,以减少预测误差。

残差修正(Residual Correction)在化工反应产物浓度预测中的应用

背景介绍

在化工生产过程中,准确预测化学反应的产物浓度对于优化工艺条件、提高产品质量和降低生产成本至关重要。尽管基于物理和化学原理建立的机理模型能够提供对反应过程的基本理解,但由于实际操作中存在复杂的非理想因素(如温度波动、杂质影响等),这些模型往往会产生一定的系统性偏差。为了提高预测精度,可以通过收集实际数据并利用数据驱动的方法对机理模型的预测误差进行修正。

具体步骤
  1. 构建机理模型

根据化学反应的动力学方程和热力学原理,建立一个描述反应过程的机理模型。例如,假设有一个连续搅拌釜式反应器(CSTR),其产物浓度 C_p $可以通过如下方程计算:
d C p d t = k ( T ) [ C in − C p ] − D C p \frac{dC_p}{dt} = k(T) [C_{\text{in}} - C_p] - D C_p dtdCp=k(T)[CinCp]DCp
其中,
\begin{itemize}
\item $ k(T) $ 是温度依赖的反应速率常数;
\item $ C_{\text{in}} $ 是进料浓度;
\item $ D $ 是稀释率。
\end{itemize}

  1. 初步预测与误差分析

    • 使用上述机理模型对一系列历史工况下的产物浓度进行预测,并记录预测值 ( P_{mech} )。
    • 同时收集对应时间段内实际测量的产物浓度 ( P_{actual} ),计算每个时间点的预测误差(即残差) ( E = P_{actual} - P_{mech} )。
  2. 构建残差修正模型

    • 选择合适的机器学习算法来建模残差。常用的算法包括线性回归、支持向量机(SVM)、随机森林或神经网络等。
    • 输入特征可以包括但不限于:
      • 原始机理模型的输入参数(如温度、压力、进料浓度等)。
      • 机理模型的预测结果 ( P_{mech} )。
      • 其他可能影响残差的因素(如设备运行状态、环境条件等)。
    • 目标变量是计算得到的残差 ( E )。

目标变量是计算得到的残差 E,定义为实际值与机理模型预测值之差:
E = P actual − P mech E = P_{\text{actual}} - P_{\text{mech}} E=PactualPmech

  1. 训练与验证

    • 划分数据集为训练集和测试集,通常按照70%训练集和30%测试集的比例。
    • 使用训练集训练选定的数据模型,目标是最小化预测残差与实际残差之间的差异。
    • 在测试集上评估模型性能,常用指标包括均方误差(MSE)、平均绝对误差(MAE)等,确保模型具有良好的泛化能力。
  2. 集成模型部署

    • 将机理模型与残差修正模型结合起来,形成一个集成预测系统。具体做法是在每次进行产物浓度预测时,首先使用机理模型得出初步预测值,然后利用残差修正模型对该预测值进行调整。

集成后的预测公式可以表示为:
P final = P mech + E predicted P_{\text{final}} = P_{\text{mech}} + E_{\text{predicted}} Pfinal=Pmech+Epredicted
其中,

P mech P_{\text{mech}} Pmech 是最终的产物浓度预测值;
E predicted E_{\text{predicted}} Epredicted 是由残差修正模型预测得到的残差。

  1. 持续改进
    • 定期收集新的实际数据,重新训练残差修正模型,以适应生产工艺的变化或发现新的影响因素。
    • 分析模型输出,识别出哪些因素对残差的影响最大,为进一步优化机理模型提供依据。
效果评估

通过采用残差修正方法,不仅能够利用机理模型提供的理论基础,还能借助数据驱动的方法捕捉到那些难以用物理定律精确描述的实际复杂性。这种方法有效地减少了预测误差,提高了产物浓度预测的准确性。这对于化工生产的实时监控和优化控制具有重要意义,有助于提高生产效率、降低成本并保证产品质量的一致性。

3. 联合建模(Hybrid Modeling)

描述:直接将机理方程嵌入到数据驱动模型中,形成混合模型结构。

示例:在一个热力学过程控制案例中,可以将描述能量转换和传递的基本物理定律(如热传导方程)集成到神经网络架构中,创建所谓的“物理信息神经网络”(PINNs)。这种方法不仅考虑了已知的物理约束,还能通过学习识别复杂模式来提高模型的预测能力。
使用PyTorch实现物理信息神经网络(PINNs)来解决类似的热传导问题,可以按照以下步骤进行。我们将构建一个简单的二维稳态热传导问题模型,并训练它以满足给定的边界条件和物理方程。

首先,请确保安装了必要的库:

pip install torch numpy matplotlib

然后,按照下面的步骤编写代码:

1. 导入必要的库

import torch
import torch.nn as nn
import numpy as np
import matplotlib.pyplot as plt

2. 定义物理方程损失函数

我们将定义一个函数来计算拉普拉斯方程 (\nabla^2 T = 0) 的残差。

def pde_residual(inputs, outputs):"""计算物理方程的残差:param inputs: 输入数据 (x, y):param outputs: 神经网络输出 (T):return: 残差"""x = inputs.requires_grad_(True)T = outputsgrads = torch.autograd.grad(T.sum(), x, create_graph=True)[0]dT_dx, dT_dy = grads[:, 0], grads[:, 1]# 计算二阶导数d2T_dx2 = torch.autograd.grad(dT_dx.sum(), x, create_graph=True)[0][:, 0]d2T_dy2 = torch.autograd.grad(dT_dy.sum(), x, create_graph=True)[0][:, 1]return d2T_dx2 + d2T_dy2

3. 构建神经网络模型

class PINN(nn.Module):def __init__(self):super(PINN, self).__init__()self.net = nn.Sequential(nn.Linear(2, 20),nn.Tanh(),nn.Linear(20, 20),nn.Tanh(),nn.Linear(20, 1))def forward(self, x):return self.net(x)

4. 准备训练数据并定义损失函数

model = PINN()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)# 边界条件样本
boundary_points = torch.tensor([[0, y] for y in np.linspace(0, 1, 10)] +[[1, y] for y in np.linspace(0, 1, 10)] +[[x, 0] for x in np.linspace(0, 1, 10)] +[[x, 1] for x in np.linspace(0, 1, 10)], dtype=torch.float32)boundary_values = torch.sin(np.pi * boundary_points[:, 0])  # 假设边界条件# 内部点样本
internal_points = torch.rand((100, 2), requires_grad=True)def train_step(internal_points, boundary_points):optimizer.zero_grad()predictions_internal = model(internal_points)predictions_boundary = model(boundary_points)# 物理方程损失physics_loss = torch.mean(torch.square(pde_residual(internal_points, predictions_internal)))# 边界条件损失boundary_loss = torch.mean(torch.square(predictions_boundary - boundary_values))total_loss = physics_loss + boundary_losstotal_loss.backward()optimizer.step()return total_loss.item()

5. 训练模型

epochs = 2000
for epoch in range(epochs):loss_value = train_step(internal_points, boundary_points)if epoch % 100 == 0:print(f"Epoch {epoch}, Loss: {loss_value}")

6. 测试模型

test_x, test_y = np.mgrid[0:1:10j, 0:1:10j]
test_points = np.vstack([test_x.ravel(), test_y.ravel()]).T
test_points = torch.tensor(test_points, dtype=torch.float32)predictions = model(test_points).detach().numpy().reshape(10, 10)plt.imshow(predictions, extent=[0, 1, 0, 1], origin='lower', cmap='jet')
plt.colorbar(label='Temperature')
plt.title('Predicted Temperature Distribution')
plt.show()

这段代码展示了如何使用PyTorch实现一个简单的物理信息神经网络(PINN),用于解决二维稳态热传导问题。通过结合物理定律(在这里是拉普拉斯方程)和神经网络的学习能力,我们可以更准确地预测温度分布。实际应用中可能需要根据具体情况调整网络结构、损失函数以及训练策略。

4. 多模型融合(Ensemble Methods)

描述:同时运行多个独立的机理模型和数据模型,并通过某种策略(如加权平均、投票机制等)综合它们的输出结果。

示例:对于气象预报中的降雨量预测,可以采用一个基于物理定律的大气动力学模型与多个基于历史数据训练的不同类型机器学习模型(如SVM, RF, ANN等)。最终预测值可以通过对所有模型预测结果的加权平均得出,权重可以根据各模型在过去的表现动态调整。
为了增加一个基于物理定律的机理模型到上述多模型融合的例子中,我们需要定义一个模拟大气动力学行为的简单机理模型。由于实际的大气动力学模型可能非常复杂且难以直接实现,这里我们将创建一个简化的“伪”大气动力学模型,该模型基于一些假设和简单的物理关系来预测降雨量。

代码

我们将引入一个简化版的机理模型,并将其集成到现有的多模型融合框架中。

import numpy as np
from sklearn.ensemble import RandomForestRegressor
from sklearn.svm import SVR
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.preprocessing import StandardScaler
import torch
import torch.nn as nn
import matplotlib.pyplot as plt# 假设我们有一个包含气象特征和目标变量(降雨量)的数据集
data = np.random.rand(1000, 5)  # 5个特征
target = np.random.rand(1000)X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=0.2, random_state=42)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)# 构建数据驱动模型
rf_model = RandomForestRegressor(n_estimators=100)
svm_model = SVR()rf_model.fit(X_train_scaled, y_train)
svm_model.fit(X_train_scaled, y_train)# 构建神经网络模型
class SimpleNN(nn.Module):def __init__(self):super(SimpleNN, self).__init__()self.fc1 = nn.Linear(5, 10)self.fc2 = nn.Linear(10, 1)def forward(self, x):x = torch.relu(self.fc1(x))return self.fc2(x)nn_model = SimpleNN()
optimizer = torch.optim.Adam(nn_model.parameters(), lr=0.01)
criterion = nn.MSELoss()# 将numpy数组转换为torch tensor
X_train_torch = torch.tensor(X_train_scaled, dtype=torch.float32)
y_train_torch = torch.tensor(y_train, dtype=torch.float32).view(-1, 1)for epoch in range(1000):optimizer.zero_grad()outputs = nn_model(X_train_torch)loss = criterion(outputs, y_train_torch)loss.backward()optimizer.step()# 简化的机理模型:基于湿度和温度预测降雨量
def mechanistic_model(X):humidity = X[:, 0]  # 假设第一个特征是湿度temperature = X[:, 1]  # 假设第二个特征是温度rainfall = np.maximum(0, (humidity - 0.5) * (temperature - 15))  # 简单的关系式return rainfall# 预测
def ensemble_predict(models, weights, X):predictions = []for model, weight in zip(models, weights):if isinstance(model, (RandomForestRegressor, SVR)):pred = model.predict(X)elif isinstance(model, nn.Module):pred = model(torch.tensor(X, dtype=torch.float32)).detach().numpy()else:pred = model(X)predictions.append(pred * weight)return np.sum(predictions, axis=0) / np.sum(weights)# 计算各模型的权重(这里简单地根据交叉验证得分)
rf_scores = cross_val_score(rf_model, X_train_scaled, y_train, cv=5, scoring='neg_mean_squared_error')
svm_scores = cross_val_score(svm_model, X_train_scaled, y_train, cv=5, scoring='neg_mean_squared_error')weights = [np.mean(rf_scores), np.mean(svm_scores), 1, 0.5]  # 假设给机理模型分配了较小的权重models = [rf_model, svm_model, nn_model, mechanistic_model]
predictions = ensemble_predict(models, weights, X_test_scaled)# 绘制结果
plt.plot(y_test, label="True")
plt.plot(predictions, label="Predicted")
plt.legend()
plt.show()

解释

  • 机理模型

    • 我们定义了一个名为mechanistic_model的函数,它接受输入数据X并返回基于湿度和温度的简单降雨量预测。
    • 这里的公式(humidity - 0.5) * (temperature - 15)只是一个示例,用于演示目的。在实际应用中,您需要根据具体问题调整此公式或使用更复杂的物理模型。
  • 权重分配

    • 在这个例子中,我们为每个模型分配了不同的权重。对于机理模型,我们假设其权重较小(例如0.5),因为它的准确性可能不如经过训练的数据驱动模型高。
  • 集成预测

    • ensemble_predict函数现在可以处理不同类型的模型(包括PyTorch模型和自定义的机理模型),并通过加权平均生成最终的预测值。

通过这种方式,我们可以将基于物理定律的机理模型与数据驱动模型结合起来,利用它们各自的优点来提高整体预测性能。这种方法特别适用于那些既有明确物理机制又具有大量历史数据可供分析的领域。

5. 参数校准(Parameter Calibration)

描述:使用数据驱动的方法来优化或校准机理模型中的不确定参数。

示例:在流体力学模拟中,湍流模型通常含有若干经验参数。这些参数可以通过比较模拟结果与实验数据之间的差异来进行优化。一种常见做法是应用遗传算法或其他优化技术来搜索最优参数集,使得模拟结果尽可能接近实测数据。

每种融合方式都有其适用场景和局限性,选择哪种方法取决于具体问题的需求、可用数据的质量以及预期达到的目标。通过合理选择并实施适当的融合策略,可以有效提升模型的整体性能和可靠性。

案例阐述:参数校准(Parameter Calibration)在流体力学模拟中的应用

背景介绍

在流体力学领域,湍流模型通常包含若干经验参数,这些参数直接影响到模拟结果的准确性和可靠性。然而,由于实际流动条件的复杂性,直接从理论上确定这些参数往往是困难的。因此,采用数据驱动的方法来优化或校准这些不确定参数成为一种有效的解决方案。通过比较模拟结果与实验数据之间的差异,并利用优化算法搜索最优参数集,可以使模拟结果更加接近实际情况。

实现步骤
  1. 定义问题

    • 假设我们有一个简单的二维稳态流场模型,其中包含一个需要校准的经验参数 (C_{\mu})(例如,在(k-\epsilon)湍流模型中)。
    • 我们的目标是找到一个最优的 (C_{\mu}),使得模拟得到的速度场尽可能接近实验测量值。
  2. 构建机理模型

    • 根据流体力学的基本方程(如Navier-Stokes方程),建立描述流场行为的基础模型。
    • 在此示例中,我们将简化为一个基于给定参数 (C_{\mu}) 的速度预测模型。
  3. 准备实验数据

    • 收集一系列实验测量点的速度数据作为参考标准,用于评估和校准模型。
  4. 定义损失函数

    • 定义一个损失函数,该函数衡量模拟结果与实验数据之间的差异。常用的选择包括均方误差(MSE)等。
  5. 选择并应用优化算法

    • 使用遗传算法、粒子群优化(PSO)、贝叶斯优化等方法来搜索使损失函数最小化的参数值。
    • 在这个例子中,我们将使用PyTorch结合SciPy库中的优化工具来进行参数校准。
  6. 实现与验证

下面是一个具体的PyTorch实现示例:

import torch
import torch.nn as nn
from scipy.optimize import minimize
import numpy as np# 假设的流体力学模型,这里简化为根据给定参数C_mu计算速度
def fluid_dynamics_model(C_mu, x):"""简化的流体力学模型,基于给定的C_mu计算速度场:param C_mu: 需要校准的经验参数:param x: 输入位置坐标:return: 计算得到的速度"""# 这里只是一个示例公式,实际情况可能更复杂return C_mu * (x[0]**2 + x[1]**2)# 实验数据点的位置和对应的实验测量速度
experiment_data = np.array([[0.1, 0.1, 0.02],  # [x, y, measured_speed][0.5, 0.5, 0.1],[0.9, 0.9, 0.08],
])# 定义损失函数
def loss_function(C_mu):total_loss = 0for point in experiment_data:x, y, measured_speed = pointpredicted_speed = fluid_dynamics_model(C_mu, [x, y])total_loss += (predicted_speed - measured_speed) ** 2return total_loss / len(experiment_data)# 初始猜测值
initial_guess = [0.09]  # 对于C_mu的一个初始估计值# 使用SciPy进行优化
result = minimize(loss_function, initial_guess, method='L-BFGS-B')print("Optimized C_mu:", result.x[0])# 验证校准后的模型
calibrated_C_mu = result.x[0]
for point in experiment_data:x, y, measured_speed = pointpredicted_speed = fluid_dynamics_model(calibrated_C_mu, [x, y])print(f"Position ({x}, {y}): Measured Speed = {measured_speed}, Predicted Speed = {predicted_speed}")

解释

  • 流体力学模型fluid_dynamics_model 是一个简化的模型,它接受一个经验参数 (C_{\mu}) 和位置坐标 ([x, y]),然后基于某个公式返回预测的速度值。这只是一个示例公式,实际情况会根据具体问题有所不同。

  • 实验数据experiment_data 包含了多个位置及其对应的实验测量速度值,用于评估模型性能并与之对比。

  • 损失函数loss_function 定义了如何计算模拟结果与实验数据之间的差异。在这个例子中,我们使用了均方误差(MSE)作为损失函数。

  • 优化过程:使用 minimize 函数从 SciPy 库中执行优化过程,寻找使损失函数最小化的 (C_{\mu}) 值。这里选择了 L-BFGS-B 方法,但也可以尝试其他优化算法。

  • 结果验证:最后,我们使用校准后的 (C_{\mu}) 值重新计算每个实验数据点的速度,并打印出来以验证模型性能。

这种方法可以有效地应用于各种需要参数校准的情况,不仅限于流体力学领域,还可以扩展到化学反应动力学、热传导等多个领域。通过结合物理理解和数据驱动的优化技术,可以显著提高模型的准确性和适用性。

相关文章:

机理模型与数据模型融合的方式

机理模型与数据模型的融合旨在结合两者的优势,以提供更准确、可靠的预测和决策支持。以下是几种常见的融合方式及其示例: 1. 特征增强(Feature Augmentation) 描述:将由机理模型计算得到的结果作为额外特征加入到数据…...

高效 MyBatis SQL 写法一

高效 MyBatis SQL 写法一 前言 MyBatis 作为一款优秀的持久层框架,极大地简化了数据库操作。 然而,在实际开发中,XML 配置的编写仍然可能显得繁琐。 本文将分享一些 MyBatis 动态 SQL 的优质写法,帮助开发者提升效率并减少错误…...

vue3中的ref相关的api及用法

在 Vue 3 中&#xff0c;ref 相关的 API 主要用于管理响应式数据。以下是 ref 相关的 API 及其用法&#xff1a; 1. ref ref 用于创建响应式的基本数据类型或对象。 用法示例&#xff1a; <script setup> import { ref } from vue;const count ref(0);const incremen…...

3 卷积神经网络CNN

1 Image Classification (Neuron Version) – 1.1 Observation 1 1.2 Observation 2 如果不同的receptive field需要相同功能的neuron&#xff0c;可以使这些neuron共享参数 1.3 Benefit of Convolutional Layer 2 Image Classification (Filter Version) 不用担心filter大小…...

CSV数据分析智能工具(基于OpenAI API和streamlit)

utils.py&#xff1a; from langchain_openai import ChatOpenAI from langchain_experimental.agents.agent_toolkits import create_csv_agent import jsonPROMPT_TEMPLATE """你是一位数据分析助手&#xff0c;你的回应内容取决于用户的请求内容。1. 对于文…...

解决php8.3无法加载curl扩展

把它的值更改为扩展存在的目录的绝对路径(扩展存在的目录为有php_xxx.dll存在的目录) extension_dir "e:\serv\php83\ext" 然后从php根目录复制 libssh2.dll 和 libcrypto-*.dll 和 libssl-*.dll 到Apache根目录下的bin目录 重启apache服务即可...

拍照对比,X70 PRO与X90 PRO+的细节差异

以下是局部截图&#xff08;上X70P下X90PP&#xff09; 对比1 这里看不出差异。 对比2 X90PP的字明显更清楚。 对比3 中下的字&#xff0c;X90PP显然更清楚。...

《MPRnet》学习笔记

paper&#xff1a;2102.02808 GitHub&#xff1a;swz30/MPRNet: [CVPR 2021] Multi-Stage Progressive Image Restoration. SOTA results for Image deblurring, deraining, and denoising. 目录 摘要 1、介绍 2、相关工作 2.1 单阶段方法 2.2 多阶段方法 2.3 注意力机…...

机器学习-线性回归(参数估计之结构风险最小化)

前面我们已经了解过关于机器学习中的结构风险最小化准则&#xff0c;包括L1 正则化&#xff08;Lasso&#xff09;、L2 正则化&#xff08;Ridge&#xff09;、Elastic Net&#xff0c;现在我们结合线性回归的场景&#xff0c;来了解一下线性回归的结构风险最小化&#xff0c;通…...

C++11详解(二) -- 引用折叠和完美转发

文章目录 2. 右值引用和移动语义2.6 类型分类&#xff08;实践中没什么用&#xff09;2.7 引用折叠2.8 完美转发2.9 引用折叠和完美转发的实例 2. 右值引用和移动语义 2.6 类型分类&#xff08;实践中没什么用&#xff09; C11以后&#xff0c;进一步对类型进行了划分&#x…...

深度学习系列--01.入门

一.深度学习概念 深度学习&#xff08;Deep Learning&#xff09;是机器学习的分支&#xff0c;是指使用多层的神经网络进行机器学习的一种手法抖音百科。它学习样本数据的内在规律和表示层次&#xff0c;最终目标是让机器能够像人一样具有分析学习能力&#xff0c;能够识别文字…...

熵采样在分类任务中的应用

熵采样在分类任务中的应用 在机器学习的分类任务里,数据的标注成本常常制约着模型性能的提升。主动学习中的熵采样策略,为解决这一难题提供了新的思路。本文将带你深入了解熵采样在分类任务中的原理、应用及优势。 一、熵采样的原理(优化版) 熵,源于信息论,是对不确定…...

vite配置之---依赖优化选项

vite optimizeDeps 配置项主要在 开发环境 中对依赖项发挥作用 optimizeDeps.entries vite optimizeDeps.entries 是 Vite 配置中的一个选项&#xff0c;用来指定要优化的入口文件。这在开发环境中尤其有用&#xff0c;因为它告诉 Vite 需要预构建哪些文件&#xff0c;以便加速…...

Shell基础:中括号的使用

在Shell脚本中&#xff0c;中括号&#xff08;[ ... ] 和 [[ ... ]]&#xff09;是一种常见的条件测试结构。它们用于进行文件类型检查、值比较以及逻辑判断。通过了解它们的不同特点和用法&#xff0c;能够帮助你编写更加高效、安全且易读的脚本。本文将详细介绍Shell中单中括…...

oracle ORA-27054报错处理

现象 在oracle执行expdp&#xff0c;rman备份&#xff0c;xtts的时候,由于没有足够的本地空间&#xff0c;只能使用到NFS的文件系统但有时候会出现如下报错 ORA-27054: NFS file system where the file is created or resides is not mounted with correct options根据提示信…...

SpringCloud速通教程

视频地址 文档地址 3. SpringCloud - 快速通关...

MapReduce分区

目录 1. MapReduce分区1.1 哈希分区1.2 自定义分区 2. 成绩分组2.1 Map2.2 Partition2.3 Reduce 3. 代码和结果3.1 pom.xml中依赖配置3.2 工具类util3.3 GroupScores3.4 结果 参考 本文引用的Apache Hadoop源代码基于Apache许可证 2.0&#xff0c;详情请参阅 Apache许可证2.0。…...

python算法和数据结构刷题[3]:哈希表、滑动窗口、双指针、回溯算法、贪心算法

回溯算法 「所有可能的结果」&#xff0c;而不是「结果的个数」&#xff0c;一般情况下&#xff0c;我们就知道需要暴力搜索所有的可行解了&#xff0c;可以用「回溯法」。 回溯算法关键在于:不合适就退回上一步。在回溯算法中&#xff0c;递归用于深入到所有可能的分支&…...

JDK 中 NIO 框架设计与实现:深入剖析及实战样例

一、引言 在 Java 的发展历程中&#xff0c;I/O&#xff08;Input/Output&#xff09;操作一直是构建高效、稳定应用程序的关键环节。传统的 Java I/O 操作基于流&#xff08;Stream&#xff09;的方式&#xff0c;虽然简单易用&#xff0c;但在面对高并发、大规模数据传输等场…...

基于springboot校园点歌系统

基于Spring Boot的校园点歌系统是一种专为校园场景设计的音乐点播平台&#xff0c;它能够丰富学生的校园生活&#xff0c;提升学生的娱乐体验。以下是对该系统的详细介绍&#xff1a; 一、系统背景与意义 在校园环境中&#xff0c;学生们对于音乐有着浓厚的兴趣&#xff0c;传…...

Spring 核心技术解析【纯干货版】- IX:Spring 数据访问模块 Spring-Jdbc 模块精讲

在现代企业级应用中&#xff0c;数据访问层的稳定性和高效性至关重要。为了简化和优化数据库操作&#xff0c;Spring Framework 提供了 Spring-JDBC 模块&#xff0c;旨在通过高度封装的 JDBC 操作&#xff0c;简化开发者的编码负担&#xff0c;减少冗余代码&#xff0c;同时提…...

React开发中箭头函数返回值陷阱的深度解析

React开发中箭头函数返回值陷阱的深度解析 一、箭头函数的隐式返回机制&#xff1a;简洁背后的规则二、块函数体中的显式返回要求&#xff1a;容易被忽视的细节三、真实场景下的案例分析案例1&#xff1a;忘记return导致组件渲染失败案例2&#xff1a;异步操作中的返回值陷阱 四…...

线程同步时定义 std::mutex 为什么要在前面添加 mutable 关键字

在C中&#xff0c;mutable关键字用于修饰类的成员变量&#xff0c;表示即使在一个const对象中&#xff0c;该成员变量也可以被修改。对于mutex这样的同步原语&#xff0c;使用mutable是必要的&#xff0c;原因如下&#xff1a; 1. 为什么需要 mutable&#xff1f; mutex通常用…...

【多线程】线程池核心数到底如何配置?

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. 前置回顾2. 动态线程池2.1 JMX 的介绍2.1.1 MBeans 介绍 2.2 使用 JMX jconsole 实现动态修改线程池2.2.…...

Linux find 命令 | grep 命令 | 查找 / 列出文件或目录路径 | 示例

注&#xff1a;本文为 “Linux find 命令 | grep 命令使用” 相关文章合辑。 未整理去重。 如何在 Linux 中查找文件 作者&#xff1a; Lewis Cowles 译者&#xff1a; LCTT geekpi | 2018-04-28 07:09 使用简单的命令在 Linux 下基于类型、内容等快速查找文件。 如果你是 W…...

爬楼梯(dp)杭电复试

一个楼梯共有 nn 级台阶&#xff0c;每次可以走一级或者两级或者三级&#xff0c;问从第 00 级台阶走到第 nn 级台阶一共有多少种方案。 输入格式 一个整数 NN。 输出格式 一个整数&#xff0c;表示方案总数。 数据范围 1≤N≤201≤N≤20 输入样例&#xff1a; 4输出样…...

JVM执行引擎

一、执行引擎的概述: 执行引擎是]ava虚拟机核心的组成部分之一; “虚拟机”是一个相对于“物理机”的概念&#xff0c;这两种机器都有代码执行能力&#xff0c;其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的&#xff0c;而虚拟机的执行引擎则…...

企业四要素如何用PHP进行调用

一、什么是企业四要素&#xff1f; 企业四要素接口是在企业三要素&#xff08;企业名称、统一社会信用代码、法定代表人姓名&#xff09;的基础上&#xff0c;增加了一个关键要素&#xff0c;通常是企业注册号或企业银行账户信息。这种接口主要用于更全面的企业信息验证&#x…...

基于springboot河南省旅游管理系统

基于Spring Boot的河南省旅游管理系统是一种专为河南省旅游行业设计的信息管理系统&#xff0c;旨在整合和管理河南省的旅游资源信息&#xff0c;为游客提供准确、全面的旅游攻略和服务。以下是对该系统的详细介绍&#xff1a; 一、系统背景与意义 河南省作为中国的中部省份&…...

arm 下 多线程访问同一变量 ,使用原子操作 性能差问题

arm下原子操作性能差的原因 Linux Kernel(armv8-aarch64) 的原子操作的底层实现 - 极术社区 - 连接开发者与智能计算生态 arm 下如何解决 ARMs LSE (for atomics) and MySQL – MySQL On ARM – All you need to know about MySQL (and its variants) on ARM. arm 下lse 和…...

嵌入式工程师必学(143):模拟信号链基础

概述: 我们每天使用的许多电子设备,以及我们赖以生存的电子设备,如果不使用电子工程师设计的实际输入信号,就无法运行。 模拟信号链由四个主要元件组成:传感器、放大器、滤波器和模数转换器 (ADC)。这些传感器用于检测、调节模拟信号并将其转换为适合由微控制器或其他数…...

PyQt6/PySide6 的 QDialog 类

QDialog 是 PyQt6 或 PySide6 库中用于创建对话框的类。对话框是一种特殊的窗口&#xff0c;通常用于与用户进行短期交互&#xff0c;如输入信息、显示消息或选择选项等。QDialog 提供了丰富的功能和灵活性&#xff0c;使得开发者可以轻松地创建各种类型的对话框。下面我将详细…...

【AI日记】25.02.05 自由不是一种工具

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】 AI kaggle 比赛&#xff1a;Backpack Prediction Challenge感想&#xff1a;这次比赛的数据集的一大特点是信号过弱或者噪声过大&#xff0c;也是一大难点&#xff0c;即使kaggle 官方增加了一…...

【原子工具】快速幂 快速乘

题幂算.一切即1 阴阳迭变积微著&#xff0c;叠浪层峦瞬息功 莫道浮生千万事&#xff0c;元知万象一归宗 文章目录 快速幂原始快速幂&#xff08;O(logn)&#xff09;二分递归形式非递归形式 模下意义的快速幂&#xff08;O(logn)&#xff09;二分递归形式非递归形式 快速乘龟速…...

2024年12月 Scratch 图形化(四级)真题解析 中国电子学会全国青少年软件编程等级考试

202412 Scratch 图形化&#xff08;四级&#xff09;真题解析 中国电子学会全国青少年软件编程等级考试 一、选择题(共10题&#xff0c;共30分) 第 1 题 列表存放全班同学的身高&#xff0c;小猫运行下列程序&#xff0c;下列选项说法正确的是&#xff1f;&#xff08; &#…...

【面试宝典】机器学习:深度解析高频面试题与解答策略

目录 &#x1f354; 机器学习中特征的理解 &#x1f354; 机器学习三要素如何理解? &#x1f354; 机器学习中&#xff0c;有哪些特征选择的⼯程⽅法&#xff1f; &#x1f354; 机器学习中的正负样本 &#x1f354; 线性分类器与⾮线性分类器的区别及优劣 &#x1f354…...

使用 ElementUI 和 Spring 实现稳定可靠的文件上传和下载功能

前端(ElementUI) 1. 文件上传 使用 el-upload 组件配置上传接口处理上传成功和失败<template><div><el-uploadclass="upload-demo"action="http://your-server-url/upload":on-success="handleSuccess":on-error="handle…...

Linux驱动---字符设备

目录 一、基础简介 1.1、Linux设备驱动分类 1.2、字符设备驱动概念 二、驱动基本构成 2.1、驱动模块的加载和卸载 2.2、添加LICENNSE以及其他信息 三、字符设备驱动开发步骤 3.1、分配主次设备号 3.1.1 主次设备号 3.1.2静态注册设备号 3.1.3动态注册设备号 3.1.4释…...

FastReport.NET控件篇之交叉表控件

认识交叉表 上面是交叉表的原型&#xff0c;关键的三个单元格。 单元格①&#xff1a;用于扩展行数据&#xff0c;譬如打印学生成绩表时&#xff0c;每个学生一行&#xff0c;那么这个地方就是以学生姓名列进行打印。 单元格②&#xff1a;用于扩展列数据&#xff0c;譬如打印…...

构建高效复杂系统的关键:架构与模块详解

目录 一、复杂系统组成 二、接入系统 (Access System) 三、应用系统 (Application System) 四、基础平台 (Foundation Platform) 五、中间件 (Abundant External Middleware) 六、支撑系统 (Supporting System) 七、总结 参考文章 干货分享&#xff0c;感谢您的阅读&am…...

C++之递归

递归 递归函数是指一个函数直接或间接地调用自身。递归函数通常用于解决可以分解为相似子问题的问题&#xff0c;例如计算阶乘、斐波那契数列、遍历树结构等 基本结构 一个递归函数通常包含两个部分&#xff1a; 基准条件&#xff08;Base Case&#xff09;&#xff1a;这是…...

pushgateway指标聚合问题

一 问题现象 一个job有多个实例推送指标&#xff0c;但是从pushgateway上看这个job的instance字段&#xff0c;只显示一个实例的ip&#xff0c;而不是多个实例。导致在grafana上无法正常根据ip查看监控。 应用的prometheus的配置 management:metrics:tags:application: ${spr…...

mini-lsm通关笔记Week2Day7

项目地址&#xff1a;https://github.com/skyzh/mini-lsm 个人实现地址&#xff1a;https://gitee.com/cnyuyang/mini-lsm 在上一章中&#xff0c;您已经构建了一个完整的基于LSM的存储引擎。在本周末&#xff0c;我们将实现存储引擎的一些简单但重要的优化。欢迎来到Mini-LSM的…...

[权限提升] Windows 提权 维持 — 系统错误配置提权 - 注册表权限配置错误提权

关注这个专栏的其他相关笔记&#xff1a;[内网安全] 内网渗透 - 学习手册-CSDN博客 0x01&#xff1a;注册表权限配置错误提权原理 通常 Windows 中的服务都是以 System 权限运行的&#xff0c;而 Windows 的服务程序的启动路径又是存放在注册表中的&#xff0c;若注册表配置不…...

产品经理的人工智能课 02 - 自然语言处理

产品经理的人工智能课 02 - 自然语言处理 1 自然语言处理是什么2 一个 NLP 算法的例子——n-gram 模型3 预处理与重要概念3.1 分词 Token3.2 词向量化表示与 Word2Vec 4 与大语言模型的交互过程参考链接 大语言模型&#xff08;Large Language Models, LLMs&#xff09;是自然语…...

软件工程导论三级项目报告--《软件工程》课程网站

《软件工程》课程网站 摘要 本文详细介绍了《软件工程》课程网站的设计与实现方案&#xff0c;包括可行性分析、需求分析、总体设计、详细设计、测试用例。首先&#xff0c;通过可行性分析从各方面确认了该工程的可实现性&#xff0c;接着需求分析明确了系统的目标用户群和功能…...

FPGA|IP核PLL调用测试:调用IP核

1、选择tools-》Megawizard plug-In manager 2、选择第一项&#xff0c;下一步 3、选择ATPLL&#xff0c;芯片系列、和输出文件类型&#xff0c;输出文件名称&#xff0c;单击next 4、出现配置PLL界面 5、选择输入时钟频率&#xff0c;单击next 6、生成reset、和locked信号&…...

leetcode_双指针 160.相交链表

160.相交链表 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 思路: 本题中&#xff0c;交点不是数值相等&#xff0c;而是指针相等 双指针遍历两遍后必定相遇&#xff0c…...

TongSearch3.0.4.0安装和使用指引(by lqw)

文章目录 安装准备手册说明支持的数据类型安装控制台安装单节点(如需集群请跳过这一节)解压和启动开启X-Pack Security和生成p12证书&#xff08;之后配置内置密码和ssl要用到&#xff09;配置内置用户密码配置ssl&#xff08;先配置内置用户密码再配ssl&#xff09;配置控制台…...

2021.3.1的android studio版本就很好用

使用最新版的studio有个问题就是gradle版本也比较高&#xff0c;这样就容易出现之前项目不兼容问题&#xff0c;配置gradle可能会出现很多问题比较烦&#xff0c;所以干脆就用老版本的studio...