无标签数据下的模型评估:SUDO方法与可靠性-完整性曲线实战指南

news2026/5/9 22:17:49
1. 项目概述当数据没有“标准答案”时我们如何评价模型在机器学习项目的实际落地中我们常常会陷入一个尴尬的境地模型训练好了但用来评估它性能的“黄金标准”测试集要么不存在要么获取成本高得离谱。想象一下你开发了一个用于识别罕见疾病的医学影像模型或者一个分析社交媒体情绪倾向的NLP模型。你可能有海量的未标注数据但让专家逐一标注出一个可靠的测试集不仅耗时数月、耗资巨大甚至在某些领域如涉及主观判断的创意内容分析根本不存在一个绝对的“标准答案”。这就是“无标签数据下的模型评估”所要解决的核心痛点。传统的模型评估严重依赖于有标签的测试集通过准确率、精确率、召回率、F1分数等指标来衡量模型表现。然而当标签缺失时这套方法论就完全失效了。我们无法直接计算模型预测与真实标签的差异那么我们该如何判断一个模型是好是坏如何比较不同模型的优劣又如何在模型迭代中确信新版本比旧版本有所提升SUDO方法及其核心工具——可靠性-完整性曲线正是为解决这一难题而生。SUDO全称“Scoring Unlabeled Data with Out-of-distribution detection”其核心思想并非去“猜”缺失的标签而是通过一套巧妙的数学框架和统计工具在不依赖真实标签的情况下量化评估模型预测的“可信度”。它不是告诉你模型在某个类别上的准确率是85%而是告诉你模型对其自身做出的这一系列预测整体上有多少是“自洽的”、“可靠的”以及这些可靠的预测覆盖了多少数据。简单来说SUDO方法让我们在“黑暗”中无标签环境也能对模型的“手感”和“覆盖范围”有一个清晰的度量。这对于数据标注预算有限、需要快速模型迭代的A/B测试场景或是处理主观性任务如内容质量评分、创意生成评估至关重要。接下来我将深入拆解SUDO方法的工作原理、实操步骤并分享在应用该方法时积累的关键心得与避坑指南。2. SUDO方法的核心原理不依赖标签的评估哲学要理解SUDO我们首先要跳出“与标准答案对比”的思维定式。SUDO方法的评估不依赖于外部提供的“真实标签”而是依赖于模型自身的预测输出以及一个关键的假设一个“好”的模型其预测应该具有内在的一致性和可靠性。2.1 核心概念预测置信度与数据分布SUDO方法的基础建立在每个数据点的“预测置信度”之上。对于分类任务这通常是模型输出的Softmax概率向量中最大概率值即模型认为最有可能的类别的概率。例如对于一个猫狗分类器给定一张图片模型输出[0.9, 0.1]猫的概率0.9狗的概率0.1那么其预测置信度就是0.9。然而仅仅看置信度绝对值是不够的。一个关键问题是置信度高就一定代表预测正确吗未必。模型可能会对某些它从未见过的、分布外的数据Out-of-Distribution OOD也产生高置信度的错误预测。因此SUDO引入了对数据分布的分析。它通过某种方式例如利用验证集或模型内部特征来估计哪些数据点处于模型训练分布的“核心区”In-Distribution ID哪些可能处于“边缘”或“外部”OOD。注意这里的“分布”判断同样不依赖真实标签。常见的方法包括基于模型预测熵的阈值法、使用辅助的OOD检测模型如基于Mahalanobis距离的方法、或分析模型中间层特征的能量值如Energy-based Score。在SUDO的经典实现中它巧妙地利用了一个“参考模型”或“集成扰动”来生成可靠性信号无需单独训练OOD检测器。2.2 可靠性分数的计算扰动与一致性SUDO方法最精髓的部分在于“可靠性分数”的计算。其核心操作是对原始数据施加一系列可控的、轻微的“扰动”然后观察模型在扰动前后预测的一致性。具体流程如下选择扰动方式这可以是输入层面的轻微噪声添加如高斯噪声、随机遮挡Dropout也可以是模型层面的随机化如使用Dropout层在不同前向传播时产生不同输出。目的是在不根本改变数据语义的前提下引入微小的不确定性。生成多次预测对同一个未标注数据点应用多次例如T次独立的扰动从而得到T个略有不同的预测概率向量。计算一致性指标比较这T个预测之间的一致性。一个高度可靠的预测应该对这些微小扰动不敏感即T次预测的结果非常接近例如预测的类别相同且概率分布相似。反之如果微小的扰动就导致预测结果剧烈变化例如猫狗分类在扰动下摇摆不定则说明模型对这个数据点的预测是脆弱的、不可靠的。常用的“一致性”量化指标可以是预测类别的一致性T次预测中出现最频繁的类别所占的比例。概率分布的稳定性计算T个预测概率向量的方差或熵的均值。基于置信度的统计量例如计算T次预测中最高置信度的均值和方差。通过对所有未标注数据点计算上述可靠性分数我们就得到了一个介于0到1之间的分数通常经过归一化分数越高代表模型对该点的预测越可靠。2.3 从个体到整体可靠性-完整性曲线的构建有了每个数据点的可靠性分数我们就可以对模型在整个未标注数据集上的表现进行宏观评估。这就是“可靠性-完整性曲线”登场的时候。构建这条曲线的思想类似于计算准确率-召回率曲线PR Curve但我们用“可靠性”替代了“准确率”用“完整性”替代了“召回率”。可靠性当我们根据可靠性分数设定一个阈值例如只考虑可靠性分数 0.8 的预测这些被筛选出来的预测集合其整体的“可信程度”如何SUDO通过一种称为“自洽性检查”或“基于聚类的伪标签一致性”的方法来估计这个值。一个简化的理解是在高可靠性子集内模型预测的类别标签会呈现出高度的簇内一致性这间接反映了其潜在的正确率。完整性被筛选出来的高可靠性预测占整个未标注数据集的比例是多少这个比例就是“完整性”。阈值设得越高可靠性估计值通常越高但被覆盖的数据比例完整性就越低。通过遍历所有可能的可靠性阈值例如从0到1步长0.01我们可以计算出一系列的可靠性 完整性点将这些点连接起来就得到了可靠性-完整性曲线RC Curve。这条曲线的解读至关重要一条更靠近右上角的RC曲线在相同完整性下拥有更高的可靠性或在相同可靠性下覆盖更多数据代表模型整体表现更好。我们可以通过计算曲线下的面积AUC-RC来得到一个单一的、可比较的模型评估分数。通过观察曲线形状我们可以诊断模型问题。例如曲线过早“塌陷”即稍微提高可靠性要求完整性就急剧下降可能意味着模型对大部分数据的预测都很不确定泛化能力差而曲线始终在低位徘徊则可能意味着模型过于“自信”校准差其可靠性分数无法有效区分正确与错误预测。3. SUDO评估的完整实操流程理解了原理我们来看如何一步步实现SUDO评估。以下流程假设你已有一个训练好的模型和一个完全无标签的待评估数据集。3.1 环境与数据准备首先确保你的开发环境包含必要的库。除了标准的深度学习框架如PyTorch/TensorFlow你可能需要一些用于数值计算和可视化的库。# 示例环境基于Python pip install torch torchvision numpy scipy scikit-learn matplotlib pandas数据准备的关键在于你的未标注数据集应尽可能与模型预期应用的数据分布一致。虽然我们无法验证标签但需要确保数据格式如图像尺寸、文本编码与模型输入要求匹配。将数据组织成可迭代的数据加载器DataLoader。3.2 实施扰动与可靠性评分这里以图像分类任务为例使用基于输入的轻微噪声扰动和基于模型的Dropout扰动相结合的方式。import torch import torch.nn.functional as F import numpy as np def compute_reliability_scores(model, unlabeled_loader, device, num_perturbations30, noise_std0.05): 计算未标注数据集中每个样本的可靠性分数。 参数: model: 训练好的模型需支持train()和eval()模式切换并包含Dropout层。 unlabeled_loader: 未标注数据的数据加载器。 device: 计算设备如‘cuda’。 num_perturbations: 对每个样本的扰动次数。 noise_std: 添加到输入图像的高斯噪声标准差。 返回: reliability_scores: 每个样本的可靠性分数形状: [数据集大小]。 all_predictions: 所有扰动的预测结果可用于后续分析。 model.eval() # 整体设置为评估模式但允许Dropout生效需要特殊处理 reliability_scores [] all_preds [] with torch.no_grad(): # 禁用梯度计算以加速 for images, _ in unlabeled_loader: # 假设loader返回(data, _)无标签 images images.to(device) batch_scores [] batch_preds [] for _ in range(num_perturbations): # 1. 输入扰动添加高斯噪声 perturbed_images images torch.randn_like(images) * noise_std perturbed_images torch.clamp(perturbed_images, 0, 1) # 对于归一化到[0,1]的图像 # 2. 模型扰动通过启用Dropout引入随机性 # 注意为了在eval模式下使用Dropout需要临时将相关模块设为train模式或使用mc_dropout model.apply(lambda m: m.train() if isinstance(m, torch.nn.Dropout) else m) outputs model(perturbed_images) model.apply(lambda m: m.eval() if isinstance(m, torch.nn.Dropout) else m) probs F.softmax(outputs, dim1) pred_class probs.argmax(dim1) confidence probs.max(dim1)[0] batch_preds.append(pred_class.cpu().numpy()) # 本次扰动的结果预测类别和置信度 # 我们暂时存储预测类别用于计算一致性 # 将batch_preds从list of arrays转换为一个数组形状为 [num_perturbations, batch_size] batch_preds_array np.stack(batch_preds, axis0) # 计算本批次每个样本的可靠性分数T次扰动中最频繁类别的出现比例 for i in range(batch_preds_array.shape[1]): # 遍历batch中的每个样本 class_counts np.bincount(batch_preds_array[:, i]) most_common_freq class_counts.max() / num_perturbations batch_scores.append(most_common_freq) reliability_scores.extend(batch_scores) # 注意这里简化了实际SUDO论文可能使用更复杂的统计量如置信度的方差等。 return np.array(reliability_scores)实操心得num_perturbations扰动次数和noise_std噪声强度是两个关键超参数。扰动次数太少统计噪声大次数太多计算成本高。经验上30-50次是一个不错的起点。噪声强度需要根据你的数据尺度调整对于归一化到[0,1]的图像0.01到0.1之间尝试目标是让扰动足以引起预测的微小变化但又不会改变图像语义。可以通过可视化少量扰动后的图像来辅助确定。3.3 构建可靠性-完整性曲线获得可靠性分数后我们需要对数据集进行排序并计算不同阈值下的可靠性与完整性。def compute_rc_curve(reliability_scores, pseudo_labels, estimation_methodcluster_consistency): 计算可靠性-完整性曲线。 参数: reliability_scores: 每个样本的可靠性分数数组。 pseudo_labels: 模型对未标注数据的原始预测伪标签形状与reliability_scores相同。 estimation_method: 可靠性估计方法。‘simple_majority’为简化版计算高可靠子集中伪标签的一致性 ‘cluster_consistency’更接近原论文思想基于聚类。 返回: thresholds: 使用的可靠性阈值列表。 reliability_estimates: 对应阈值下的可靠性估计值列表。 completeness: 对应阈值下的完整性值列表。 # 根据可靠性分数降序排序索引 sorted_indices np.argsort(reliability_scores)[::-1] sorted_scores reliability_scores[sorted_indices] sorted_plabels pseudo_labels[sorted_indices] n_total len(reliability_scores) thresholds np.linspace(0, 1, 101) # 生成0到1之间101个阈值点 reliability_list [] completeness_list [] for tau in thresholds: # 选择可靠性分数 tau 的样本 mask sorted_scores tau selected_plabels sorted_plabels[mask] n_selected len(selected_plabels) if n_selected 0: reliability_est 1.0 # 或定义为0根据曲线定义通常此时可靠性无定义或为1 else: if estimation_method simple_majority: # 简化估计计算所选样本中伪标签的“纯度” # 即最频繁的伪标签类别所占比例。这假设模型在高置信度下更可能正确。 from scipy import stats if len(selected_plabels) 0: mode_result stats.mode(selected_plabels, keepdimsTrue) reliability_est mode_result.count[0] / n_selected else: reliability_est 0 elif estimation_method cluster_consistency: # 更复杂的估计基于聚类一致性需要特征向量。 # 此处为示意简化版使用伪标签在简单聚类如K-Means with k类别数后的簇内一致性。 # 注意这需要每个样本的特征向量通常从模型的倒数第二层获取。 # 这里省略具体实现仅用伪标签的简单一致性替代。 # 在实际应用中你需要提取特征并使用聚类算法如K-Means。 # 假设我们有了特征向量 features_selected然后 # from sklearn.cluster import KMeans # n_classes len(np.unique(pseudo_labels)) # 估计类别数 # kmeans KMeans(n_clustersn_classes).fit(features_selected) # cluster_labels kmeans.labels_ # 然后计算每个聚类簇内伪标签的一致性同simple_majority逻辑。 # 此处为演示退回使用simple_majority from scipy import stats if len(selected_plabels) 0: mode_result stats.mode(selected_plabels, keepdimsTrue) reliability_est mode_result.count[0] / n_selected else: reliability_est 0 else: raise ValueError(fUnsupported estimation method: {estimation_method}) reliability_list.append(reliability_est) completeness_list.append(n_selected / n_total) return thresholds, reliability_list, completeness_list3.4 可视化与指标计算最后我们将曲线可视化并计算曲线下面积AUC-RC作为模型的综合评估分数。import matplotlib.pyplot as plt from sklearn.metrics import auc def plot_rc_curve(thresholds, reliability, completeness, model_nameModel): 绘制可靠性-完整性曲线并计算AUC。 # 过滤掉完整性为0的点通常对应阈值1.0 valid_idx np.array(completeness) 0 rel_valid np.array(reliability)[valid_idx] comp_valid np.array(completeness)[valid_idx] # 计算AUC (注意这里x轴是完整性y轴是可靠性) auc_rc auc(comp_valid, rel_valid) plt.figure(figsize(8, 6)) plt.plot(completeness, reliability, b-, linewidth2, labelf{model_name} (AUC{auc_rc:.3f})) plt.xlabel(Completeness, fontsize12) plt.ylabel(Estimated Reliability, fontsize12) plt.title(Reliability-Completeness Curve, fontsize14) plt.grid(True, linestyle--, alpha0.7) plt.legend(loclower left) plt.xlim([0, 1]) plt.ylim([0, 1]) plt.tight_layout() plt.show() return auc_rc # 假设我们已经有了 reliability_scores 和 pseudo_labels # pseudo_labels model(unlabeled_data).argmax(dim1).cpu().numpy() # 原始预测 thresholds, rel_est, comp compute_rc_curve(reliability_scores, pseudo_labels, estimation_methodsimple_majority) auc_score plot_rc_curve(thresholds, rel_est, comp, model_nameMyClassifier) print(f模型评估的AUC-RC分数为: {auc_score:.4f})4. 关键参数调优与高级技巧SUDO方法的效果很大程度上依赖于扰动策略和可靠性估计方法的选择。以下是一些进阶的调优思路和技巧。4.1 扰动策略的深度优化基础的噪声和Dropout扰动可能不足以充分探测模型的不确定性特别是对于某些架构或数据类型。多模态扰动组合对于图像结合几何变换微小旋转、平移、颜色抖动亮度、对比度微调和噪声。这能更全面地测试模型对真实世界变化的鲁棒性。对于文本使用同义词替换通过词向量寻找近义词、随机删除或交换少量词语、轻微的打乱词序。对于基于Transformer的模型可以在注意力权重或隐藏状态上添加噪声。对于时间序列应用时间扭曲轻微拉伸/压缩、添加频域噪声或进行随机切片。基于模型不确定性的自适应扰动不是对所有样本使用固定的噪声强度而是根据模型对该样本的初始预测置信度来动态调整扰动幅度。对低置信度样本使用更小的扰动以避免完全“吓跑”模型本已微弱的信号对高置信度样本使用稍大的扰动以测试其稳健性。这能使可靠性分数的区分度更高。利用模型集成如果不方便对单个模型进行多次前向传播可以使用多个独立训练的同构模型集成来产生预测分布。不同模型之间的预测差异本身就是一种强大的可靠性信号。计算集成内各模型预测的方差或熵作为可靠性分数。4.2 可靠性估计方法的抉择在compute_rc_curve函数中提到的estimation_method是关键。simple_majority简单多数计算高可靠性子集中最频繁伪标签的比例。这种方法极其简单快速但其核心假设是“模型高置信度的预测更可能是正确的”。这个假设在模型校准良好时成立但如果模型过度自信校准差这个方法会严重高估可靠性。适用于快速原型验证或已知模型校准较好的情况。cluster_consistency聚类一致性这是更接近SUDO原论文精神的方法。它首先在高可靠性子集上使用样本的特征表示例如从模型的倒数第二层提取的特征进行聚类如K-Means。然后计算每个聚类簇内伪标签的一致性同质性。其逻辑是如果模型预测是可靠的那么特征空间上相近的样本应该被预测为相同的类别。这种方法减少了对模型校准的依赖更直接地评估了预测与数据内在结构的一致性。这是推荐的生产环境使用方法尽管计算成本稍高。踩坑实录我曾在一个文本情感分析项目中使用simple_majority方法结果AUC-RC分数虚高但当我们人工抽查高可靠性样本时发现不少错误。原因是模型在训练时使用了带噪声的标签导致其校准性很差对某些错误模式也产生了高置信度。切换到基于BERT最后一层[CLS] token特征进行聚类的cluster_consistency方法后评估结果与后续小规模人工审计的结果吻合度显著提升。4.3 阈值选取与模型选择得到RC曲线和AUC-RC分数后如何指导实践模型比较在相同的未标注数据集上计算不同模型或同一模型的不同训练轮次、不同超参数的RC曲线和AUC-RC分数。AUC-RC更高的模型通常意味着其在无标签环境下整体表现更优。这是SUDO评估最直接的应用。确定应用阈值RC曲线本身可以帮助我们做出权衡决策。假设我们的下游任务要求预测的可靠性至少达到90%。我们可以在曲线上找到可靠性估计值 0.9 的点然后查看对应的“完整性”。这个完整性值告诉我们模型能在多大比例的数据上满足我们90%可靠性的要求。如果这个比例太低例如30%可能意味着当前模型无法胜任该任务或者我们需要接受更低的可靠性标准。主动学习中的样本筛选可靠性分数本身就是一个极佳的主动学习样本选择指标。我们可以优先选择那些可靠性分数处于“中间地带”既不是非常高也不是非常低的样本进行标注。因为高可靠性样本模型已经“会了”低可靠性样本可能噪声大或太难中间地带的样本标注性价比最高能最有效地提升模型。5. 常见问题、局限性与实战避坑指南没有任何方法是银弹SUDO也不例外。理解其局限性和常见陷阱能让你更好地应用它。5.1 典型问题排查表问题现象可能原因排查与解决思路RC曲线紧贴左下角低可靠性低完整性1. 模型性能极差几乎随机猜测。2. 扰动强度过大完全破坏了数据。3. 可靠性估计方法如聚类参数不当如聚类数K设错。1. 用少量有标签数据如有快速验证模型基础性能。2. 可视化扰动后的数据确保语义未丢失。减小噪声noise_std。3. 检查聚类结果尝试不同的K值或聚类算法如DBSCAN。RC曲线呈“L型”高阈值时可靠性骤降可靠性分数分布集中区分度差。可能所有预测的可靠性分数都很接近例如都集中在0.5-0.6。1. 检查扰动是否有效。尝试增加扰动次数num_perturbations或引入更多样化的扰动。2. 模型可能过于平滑或使用了强正则化如过高的Dropout率导致预测本身就不敏感。AUC-RC分数与后续小规模人工评估结果严重不符1. 可靠性估计方法失效如simple_majority用于校准差的模型。2. 未标注数据集与模型训练/验证集分布差异巨大域外数据。1.务必切换到cluster_consistency方法并使用高质量的特征。2. 检查数据分布。可以计算未标注数据与训练数据在特征空间的距离如使用MMD距离。如果差异大SUDO评估可能不准确需谨慎对待。计算速度过慢1.num_perturbations设置过高。2. 模型过大或数据量巨大。3. 聚类算法在大量高可靠性样本上耗时。1. 尝试减少num_perturbations至20-30观察曲线是否稳定。2. 对未标注数据进行随机采样确保代表性进行评估。3. 对高可靠性子集进行下采样后再聚类或使用更高效的聚类算法如MiniBatchKMeans。5.2 SUDO方法的固有局限性依赖于“内在一致性”假设SUDO的核心假设是一个好的模型其预测在面对微小扰动时是稳定的并且其预测与数据的内在聚类结构一致。对于某些任务如存在大量合理歧义的任务这个假设可能不成立导致评估偏差。无法提供绝对性能指标它给出的是可靠性与完整性的权衡曲线以及一个相对分数AUC-RC。它不能告诉你“模型的准确率是85%”只能告诉你“模型A比模型B在无标签评估中表现更好”。这对于需要满足明确性能SLAs的场景可能不够直接。对分布外数据敏感如果未标注数据集中包含大量与训练分布截然不同的样本OODSUDO的可靠性估计可能会失效因为模型对这些数据的预测可能既不稳定也不具备有意义的聚类结构。计算成本需要进行多次前向传播扰动次数和可能的聚类操作比单次推理评估成本高。5.3 我的实战心得永远将SUDO与“小规模人工审计”结合在项目关键节点尤其是在根据SUDO结果做出重要决策如选择上线模型前一定要随机抽取高、中、低可靠性分数的样本进行人工检查。这不仅能验证SUDO评估的有效性还能帮你发现模型特定的失败模式。将其作为迭代工具而非一次性判决SUDO最大的价值在于模型开发迭代周期中。你可以快速地对多个候选模型进行排序筛选出最有潜力的进行更昂贵的标注验证。它缩短了反馈循环。特征质量决定上限如果使用cluster_consistency方法从模型哪一层提取特征至关重要。通常倒数第二层预分类层的特征包含丰富的语义信息最适合聚类。可以尝试不同层的特征观察RC曲线的变化。在对比中凸显价值单独看一个模型的AUC-RC分数可能意义不大比如0.75是好是坏。但对比基线模型如一个随机初始化的模型和你精心调优的模型看到AUC-RC从0.5提升到0.75这就是实实在在的、无需标签的进步证据。无标签评估不是要取代有监督评估而是在无法获得纯净测试标签时提供一种至关重要的、量化的、可操作的模型质量洞察工具。SUDO方法及其RC曲线正是这样一把在数据标注的“黑暗森林”中照亮前路的实用手电筒。掌握它意味着你在模型落地的道路上多了一份不依赖昂贵“标准答案”的自信与从容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2598804.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…