Azure机器学习实战:汽车价格预测模型端到端部署

news2026/5/22 8:44:27
1. 项目概述在 Azure 上构建一个真正能落地的汽车价格预测模型你有没有试过想买一辆二手车却在几个平台之间反复比价、查配置、翻论坛最后还是拿不准这台车到底值不值这个价或者作为数据新人手头有份汽车数据集但卡在“怎么把模型从 Jupyter Notebook 里搬出来让别人也能用”这一步这篇内容就是为你写的——不是教你怎么推导最小二乘法而是带你亲手在 Azure 上搭起一条从数据清洗、模型训练到实时调用、对外服务的完整闭环。核心关键词是Azure Machine Learning、线性回归、实时推理管道、模型部署、端点调用。它不依赖任何本地环境全程在浏览器里完成它不追求复杂算法而是聚焦于工程化落地中最关键的那几步数据怎么准备才不会让模型“吃错药”模型怎么训练才经得起测试集检验部署后怎么验证它真能返回一个合理的价格数字。我本人从零开始搭建这个流程时在“Clean Missing Data”模块上卡了整整一天——不是因为不会操作而是没搞懂它默认的“删除整行”策略会直接干掉近40%的样本导致后续训练严重失真。后来才明白Azure 的每个模块背后都藏着明确的工程假设而这些假设恰恰是新手最容易忽略、也最该提前看清的细节。这个项目适合三类人第一类是刚学完 Scikit-learn 线性回归正发愁“学完之后下一步该干嘛”的在校生或转行者第二类是业务部门的数据分析同事手头有销售数据想快速做个价格预估工具但不想折腾服务器和 API第三类是云平台初学者想通过一个具体、可感知的项目理解“机器学习工作区”“计算集群”“管道作业”这些抽象概念到底对应着什么物理动作。它不要求你熟悉 Python 部署框架也不需要你配置 Docker 或 Kubernetes——所有操作都在 Azure ML Studio 的可视化界面上完成每一步点击都有明确意图每一个参数选择都有背后的工程权衡。比如为什么我们不用“填充均值”而选择“删除缺失行”为什么归一化只对数值列做而对品牌、车型这类分类变量必须做独热编码这些不是为了炫技而是因为线性回归模型本身对输入数据的分布极其敏感一个未经处理的字符串列直接喂进去模型要么报错要么给出完全不可信的系数。接下来的内容我会把整个流程拆解成四个核心阶段基础设施怎么搭才不踩坑、数据管道怎么设计才真正可靠、推理服务怎么部署才稳定可用、以及上线后怎么验证它真的在“干活”。每一部分我都会告诉你我当时是怎么想的、为什么这么选、如果换一种方式会出什么问题——这才是你在文档里永远找不到但在真实项目中天天要面对的东西。2. 基础设施搭建资源组、工作区与计算集群的底层逻辑2.1 资源组不是文件夹而是成本与权限的边界很多新手第一次进 Azure 控制台看到“新建资源组”就下意识当成 Windows 里的新建文件夹——建一个放模型建一个放数据建一个放日志。这是个危险的误解。资源组Resource Group本质上是一个成本核算单元和访问控制容器。它不存储任何数据也不运行任何代码但它决定了你这张账单上所有费用会按什么维度归集你给某个同事分配的“机器学习贡献者”角色权限范围到底覆盖哪些资源。举个实际例子我在测试阶段创建了一个叫ml-dev-rg的资源组里面放了工作区、计算集群、存储账户。后来想清理环境只要在控制台里选中这个资源组点“删除”所有关联资源会在几分钟内被级联删除账单也立刻停止计费。但如果我把工作区放在ml-dev-rg而把用于训练的 GPU 计算实例放在另一个gpu-prod-rg里那么删掉前者后者依然在后台疯狂烧钱而且你根本不会收到任何提醒。所以我的第一条硬性原则是一个项目一个资源组且命名必须带环境标识。比如car-price-prediction-dev-rg这样哪怕半年后回来看也能一眼认出这是哪个项目的开发环境。Azure 免费账户每月有 $200 信用额度但这个额度是按订阅Subscription计算的不是按资源组。如果你在一个订阅下建了十个资源组它们共享这 $200而不是每个都有 $200。这点在初期极易被忽略直到月底收到邮件说信用额度用完了才发现某个被遗忘的测试集群还在跑着。2.2 工作区不是“项目”而是协作与版本管理的中枢工作区Workspace常被简单理解为“你的机器学习项目主页”但它的核心价值远不止于此。它是 Azure ML 中所有资产的元数据中心你上传的数据集、编写的训练脚本、保存的模型版本、运行的管道作业、甚至实验过程中的每一次参数调整记录全部以结构化元数据的形式注册在这里。这意味着当你和同事协作时不需要互相发.ipynb文件或.py脚本只需要共享同一个工作区链接对方就能看到你昨天训练的第7个版本模型用了什么超参数、在哪个数据集上评估、AUC 是多少。更关键的是工作区天然支持实验Experiment概念。比如我最初用全部193个特征训练模型发现 R² 只有 0.72后来怀疑“normalized-losses”列的大量缺失值污染了数据就新建一个叫exp-feature-cleanup的实验在里面只保留15个核心特征重新训练R² 提升到了 0.85。这两个实验的结果、日志、输出模型全部自动归档互不干扰。工作区还强制要求你指定一个默认存储账户Default Storage Account这是所有数据上传、模型保存、日志写入的落盘位置。我建议新手直接勾选“创建新的存储账户”名字就叫wsstorage-carprice。千万别图省事选“使用现有”因为现有账户可能已被其他项目占用权限混乱后期排查数据读取失败会非常痛苦。创建工作区时系统会提示你选择区域Region这里有个隐藏陷阱免费账户的可用区域有限比如East US和West US通常可用但Japan East或UK South可能直接灰显。选错区域的后果是——你后面创建的所有计算资源都必须在这个区域内否则无法关联。我曾因选了West US 2结果发现想用的Standard_NC6GPU 实例在该区域不可用只能删掉重来。2.3 计算集群不是“开台电脑”而是弹性伸缩的算力池计算集群Compute Cluster是整个流程里最常被低估的环节。很多人以为点几下鼠标创建一个cpu-cluster就完事了其实它背后是一套完整的弹性调度策略。集群由一组虚拟机VM实例组成而每个实例的规格如Standard_DS3_v2决定了它的 CPU 核数、内存大小和临时磁盘空间。关键参数有两个最小节点数Min nodes和最大节点数Max nodes。新手常犯的错误是把最小节点设为 0认为“不用时不花钱”。这在理论上没错但实操中会带来严重延迟每次启动训练作业系统需要从 0 扩容到 1 个节点这个过程平均耗时 2-3 分钟。对于一个只需 30 秒就能跑完的简单线性回归你得等 3 分钟才开始训练体验极差。我的经验是对于开发测试环境最小节点数设为 1最大节点数设为 2。这样既能保证随时有资源可用又不会过度浪费。更重要的是集群有一个常被忽略的空闲超时Idle seconds before scale down参数默认是 1200 秒20 分钟。意思是如果集群连续 20 分钟没有任何作业在运行它就会自动缩容到最小节点数。这个值不能设得太小否则一个作业刚结束下一个作业还没提交集群就缩容了又要等扩容也不能设得太大否则深夜无人使用时集群还在全功率运行。我最终把它调成了 600 秒10 分钟这是一个在响应速度和成本之间的合理平衡点。另外集群的操作系统镜像OS image必须与你的训练脚本兼容。Azure ML 默认提供 Ubuntu 18.04 和 20.04 镜像。如果你的代码里用了pandas 2.0就必须选 20.04因为 18.04 的默认 Python 环境太老装不上新版 pandas。这个细节往往要等到训练作业报ModuleNotFoundError时才被发现白白浪费一次排队时间。3. 数据管道设计从原始数据到可训练特征的全流程拆解3.1 数据集导入与初步探查别急着建模先读懂数据在说什么Azure ML Studio 提供的 “Automobile price data (Raw)” 数据集表面看只是个 CSV 文件但它的字段设计本身就藏着大量业务线索。我第一次打开它时并没有直接拖拽“Train Model”模块而是花了整整一小时做三件事第一用 Excel 打开原始 CSV逐列看数据类型和取值范围第二在 Studio 里用 “Dataset” 功能查看各列的统计摘要第三手动计算几个关键指标。比如“price” 列最小值是 5118最大值是 45400中位数是 13200说明价格分布右偏高端车数量少但拉高了均值。再看 “num-of-doors”取值是 “two” 和 “four”但统计摘要显示有 2 个缺失值。这时候我就警觉了如果直接用“Clean Missing Data”模块删除整行这两条记录就没了但“num-of-doors”对价格影响微乎其微为这点缺失就丢掉整条车的其他 192 个特征显然不划算。这就是为什么我后续在管道里对“num-of-doors”选择了“替换为最频繁值Most frequent value”而对“horsepower”这种关键数值特征才用“删除缺失行”。数据探查的另一个重点是识别冗余特征。“normalized-losses”列缺失率高达 20%且字段名本身就暗示它是个经过复杂计算的衍生指标不是原始采集数据。在回归模型中引入一个大量缺失、含义模糊的特征不仅不会提升效果反而会增加噪声。所以我第一步就用 “Select Columns in Dataset” 模块明确剔除这一列。这个操作看似简单但背后是明确的建模哲学模型的输入特征必须是业务上可解释、数据上稳定、工程上易维护的。一个连数据工程师都说不清来源的字段再高的相关系数也不该放进生产模型。3.2 特征工程模块链每个模块的“副作用”你必须清楚整个数据清洗管道我构建了这样一个模块链Import Data→Select Columns→Clean Missing Data→Normalize Data→Edit Metadata→Convert to Indicator Values。乍看是标准流水线但每个模块的配置都藏着关键决策。先说Clean Missing Data。它的“Cleaning mode”选项有三个“Remove entire row”、“Replace using mean/median/most frequent”、“Custom replacement value”。我针对不同列用了不同策略对 “bore”、“stroke”、“horsepower” 这三个强相关数值特征选了“Remove entire row”因为它们的缺失是随机的且占比不到 2%删除后剩余样本量仍足够但对 “num-of-doors” 和 “aspiration”我改用“Replace using most frequent”因为它们是分类变量均值无意义而“most frequent”在业务上很合理——大部分车确实是四门、自然吸气。再看Normalize Data。线性回归对特征量纲极其敏感如果“wheel-base”单位是毫米约 2500-3000而“city-mpg”单位是英里/加仑约 10-50模型会把前者的变化当成后者的一百倍导致系数严重失真。所以我只对明确的数值型特征做归一化包括wheel-base,length,width,height,curb-weight,engine-size,bore,stroke,compression-ratio,horsepower,peak-rpm,city-mpg,highway-mpg。注意compression-ratio虽然是比值但它的取值范围7-23和horsepower48-288差异巨大同样需要归一化。归一化方法我选了 “Min-Max Scaling”因为它能将所有特征压缩到 [0,1] 区间直观且无负值风险。而 “Z-Score Normalization” 会产生负值对某些后续模块如某些激活函数不友好虽然线性回归本身无所谓但养成统一习惯很重要。最后是分类变量编码。Edit Metadata模块的作用是告诉系统“这些列是分类变量不是字符串”。如果不做这步后续的Convert to Indicator Values会把 “gas” 和 “diesel” 当成两个独立字符串无法生成正确的哑变量。我选中的列是fuel-type,aspiration,num-of-doors,body-style,drive-wheels,engine-location,engine-type,num-of-cylinders,fuel-system。这里有个易错点num-of-cylinders的取值是 “two”, “three”, “four”, “five”, “six”, “eight”, “twelve”看起来像数字但其实是离散类别必须编码不能当数值处理。我曾误把它留在数值列里结果模型把“twelve”当成 12强行拟合了一条毫无业务意义的直线R² 直接跌到 0.3。3.3 训练与评估如何判断你的模型不是在“死记硬背”训练管道的最后几步Split Data→Train Model→Score Model是整个流程的“判决时刻”。Split Data模块的 “Fraction of rows in the first output dataset” 参数我设为 0.7即 70% 训练30% 测试。这个比例不是玄学而是基于数据集大小205 行的务实选择小于 1000 行的数据7:3 是经验值能保证训练集有足够样本学规律测试集又有足够样本验效果。Train Model模块里我选了 “Linear Regression” 算法并勾选了 “Allow unknown categorical levels” —— 这个选项至关重要。它意味着当模型在生产环境遇到一个训练时从未见过的品牌比如新上市的某国产新能源品牌不会直接崩溃报错而是把该品牌对应的哑变量全设为 0用其他特征继续预测。这是一种优雅的降级策略。Score Model模块输出的评估指标我重点关注三个R²决定系数、Mean Absolute ErrorMAE、Root Mean Squared ErrorRMSE。R²0.85 意味着模型能解释 85% 的价格波动很好MAE1850 表示平均预测偏差 1850 美元结合价格中位数 13200误差率约 14%可以接受RMSE2400 稍高说明有少数极端预测偏差很大需要检查是否是高价豪华车样本过少导致的。我特意导出了Score Model的详细结果表发现对价格 35000 的车预测普遍偏低。这提示我数据集中高价车样本不足模型对高端市场的规律学习不够。这不是模型的问题而是数据的问题。所以我立刻在工作区里新建了一个exp-high-end-data实验专门收集更多豪华车数据为后续迭代留好接口。真正的工程化思维不是追求单次训练的完美指标而是建立一个可持续优化的反馈闭环。4. 实时推理管道与端点部署让模型走出实验室走进真实业务流4.1 推理管道的本质剥离一切“训练依赖”只保留“预测逻辑”设计实时推理管道Real-time Inference Pipeline时我做的第一件事是彻底清空脑子里关于“训练”的所有念头。训练管道的目标是“找到最优参数”推理管道的目标是“用已知参数最快最稳地给出答案”。因此两者必须物理隔离。我在 Studio 里新建了一个名为inference-pipeline-carprice的管道然后做了三件颠覆性的事第一删除所有数据导入模块。训练管道里那个可爱的 “Automobile price data (Raw)” 图标在推理管道里必须消失。因为生产环境里数据不会从 Azure 存储里自动涌进来而是由业务系统比如一个二手车销售 App通过 HTTP 请求推送过来。所以我替换成 “Enter Data Manually” 模块并在里面粘贴了一行符合特征格式的 JSON 示例{symboling:3,normalized-losses:null,make:toyota,fuel-type:gas,...}。第二重构特征选择逻辑。训练管道里“Select Columns” 是为了剔除price和normalized-losses而在推理管道里price列根本不存在所以这个模块的配置必须重写只选择那些业务系统能提供的字段比如make,body-style,engine-size,horsepower而像symboling保险风险等级这种内部字段如果业务系统不提供就必须从选择列表里移除。第三注入“结果重命名”逻辑。Score Model模块输出的列名默认是Scored Labels这对开发者友好但对业务方不友好。所以我在Web Service Output模块前插入了一个 “Execute Python Script” 模块里面只写了一行代码dataset1 pd.DataFrame({price: dataset1[Scored Labels]})。这样最终 API 返回的 JSON 就是{price: 15230.45}前端工程师拿到就能直接用不用再查文档猜字段名。这个看似微小的改动消除了前后端联调时 80% 的沟通成本。4.2 端点部署的实战细节从“部署中”到“健康”的等待艺术点击 “Deploy” 按钮选择 “New real-time endpoint”然后在计算类型里选 “Azure Container InstanceACI”这是新手最安全的选择。ACI 是 Azure 提供的轻量级容器托管服务启动快、管理简单、按秒计费非常适合验证模型逻辑。但它的局限也很明显不支持 GPU最大内存 8GB最大 CPU 核数 4。这意味着如果你的模型加载后内存占用超过 8GB部署会直接失败。我第一次部署就栽在这儿——模型文件本身只有 2MB但加载时依赖的scikit-learn和pandas库在容器里初始化占用了 7.8GB 内存只剩 200MB 给模型推理导致服务启动后立即 OOM内存溢出崩溃。解决办法是在工作区的 “Environments” 里新建一个精简版的 Conda 环境只安装scikit-learn1.0.2,pandas1.3.5,numpy1.21.5这三个必要库把环境镜像体积从 2.1GB 压缩到 850MB内存占用降到 4.2GB部署瞬间成功。部署过程通常需要 15-25 分钟这期间你什么都做不了只能盯着那个缓慢滚动的进度条。我建议你利用这段时间去 Azure Portal 的 “Activity Log” 里把这次部署的所有操作日志下载下来。日志里会详细记录容器启动的每一步拉取镜像、解压环境、加载模型、运行健康检查。如果部署失败日志就是唯一的救命稻草。部署成功后状态变成 “Healthy”这时别急着调用。先点开端点详情页找到 “Consume” 标签页那里有现成的 Python 和 curl 调用示例。我复制了 Python 示例但把里面的sample.json文件路径改成了我自己构造的一个真实测试样本一辆 2015 年丰田凯美瑞四门汽油2.5L 发动机178 马力。执行后返回{price: 14250.33}。这个数字是否合理我立刻打开二手车平台搜索同款车发现挂牌价在 13800-14600 之间。模型预测落在区间内说明它真的在“思考”而不是在“胡说八道”。4.3 端点调用与集成如何让业务系统安全、稳定地“喂”数据给模型端点 URL 的格式是https://endpoint-name.region.inference.ml.azure.com/score它背后是一个标准的 RESTful API。但直接把 URL 和密钥交给业务团队是极其危险的。Azure ML 提供了两种认证方式密钥Key和令牌Token。密钥是长期有效的一旦泄露攻击者可以无限次调用你的模型产生高额费用令牌是短期的默认 1 小时过期需刷新安全性更高。我强烈建议生产环境只用令牌认证。调用时你需要先向https://workspace-region.api.azureml.ms/sts/v1.0/issuers/workspace-id/tokens发送 POST 请求带上你的 AAD 凭据换取一个 bearer token再把这个 token 放在后续 API 请求的AuthorizationHeader 里。这个流程业务系统必须封装成一个通用的“模型调用 SDK”而不是把 token 硬编码在前端 JavaScript 里。另外API 的请求体Request Body必须是严格的 JSON 格式且字段顺序、数据类型必须与训练时完全一致。我曾遇到一个坑业务系统传来的horsepower是字符串178而模型期望的是浮点数178.0结果 API 直接返回 500 错误。解决方案是在 “Execute Python Script” 模块里加入类型强制转换dataset1[horsepower] dataset1[horsepower].astype(float)。最后监控必不可少。在端点详情页的 “Monitor” 标签页你可以看到每分钟的请求数、成功率、平均延迟。我设置了一个简单的告警如果连续 5 分钟成功率低于 95%就发邮件通知我。这比等业务方打电话来说“你们的报价接口挂了”要主动得多。模型上线不是终点而是持续观察、迭代优化的起点。我每周固定时间导出一周的调用日志分析哪些特征组合的预测误差最大然后回到工作区针对性地补充这些场景的数据重新训练再部署——这就是一个活的、不断进化的预测系统。5. 常见问题与避坑指南那些只有亲手踩过才知道的“深坑”5.1 数据加载失败90% 的问题出在“看不见”的字符上问题现象在Import Data模块里选择上传本地 CSV 文件后管道运行时报错“Failed to read dataset. Invalid column delimiter.” 明明是标准的逗号分隔为什么读不出来根本原因CSV 文件里混入了不可见的 Unicode 字符最常见的是Byte Order MarkBOM。Windows 记事本保存 UTF-8 文件时会默认在开头插入三个字节EF BB BF而 Azure ML 的 CSV 解析器不认识这个标记直接当乱码处理导致列分隔符错位。解决方案用 VS Code 打开 CSV 文件右下角会显示当前编码如 “UTF-8 with BOM”点击它选择 “Save with Encoding” - “UTF-8”。或者用 Python 脚本批量清理with open(auto.csv, r, encodingutf-8-sig) as f: content f.read() with open(auto_clean.csv, w, encodingutf-8) as f: f.write(content)提示永远不要用 Windows 记事本编辑或保存用于机器学习的数据文件。它对编码的处理过于“智能”而机器学习系统需要的是绝对“老实”的 ASCII 或 UTF-8。5.2 模型训练卡死不是算力不够而是“脏数据”在捣鬼问题现象Train Model模块的状态长时间停留在 “Running”日志里没有任何输出CPU 使用率 0%仿佛被冻住。根本原因数据中存在无限大inf或非数字NaN值且未被Clean Missing Data模块捕获。比如bore列里有一行数据是?Clean Missing Data默认只处理null和空字符串不认识?于是这个?被当作字符串传给了线性回归模型模型内部计算时产生inf导致整个训练循环陷入死锁。解决方案在Clean Missing Data模块之前加一个Execute Python Script模块用以下代码做预清洗import pandas as pd import numpy as np dataset1 dataset1.replace(?, np.nan) # 把所有 ? 替换成 NaN dataset1 dataset1.dropna(subset[bore, stroke, horsepower]) # 针对关键列删除注意dropna的subset参数必须明确指定列名不能写dropna()否则会删掉所有含 NaN 的行可能误伤大量有效数据。5.3 推理端点返回 400 错误JSON 格式合规但字段“语义”不匹配问题现象用 Postman 调用端点返回{error: Bad request. Request body is invalid.}但 JSON 格式用在线校验工具确认完全正确。根本原因Azure ML 的推理端点对JSON 字段的顺序和嵌套层级有严格要求。训练时Select Columns模块输出的列顺序是固定的比如[make, body-style, engine-size, horsepower]而你构造的 JSON 如果写成{horsepower:178, make:toyota, ...}字段顺序不同端点解析时会错位把178当成make的值导致类型错误。解决方案永远使用Consume标签页里生成的sample.json作为模板只修改值绝不改动字段名和顺序。如果业务系统无法保证顺序就在Execute Python Script模块里用pandas.DataFrame.from_dict()加reindex()强制排序import pandas as pd expected_columns [make, body-style, engine-size, horsepower] dataset1 pd.DataFrame([input_data]).reindex(columnsexpected_columns)5.4 成本失控一个被遗忘的“健康检查”在悄悄烧钱问题现象月初收到 Azure 账单发现Azure Container Instance一项费用高达 $120而你只部署了一个端点且每天只调用几十次。根本原因ACI 实例一旦部署只要状态是 “Running”就持续计费无论有没有流量。而 Azure ML 的端点健康检查Health Probe会每 30 秒向容器发送一次 GET 请求/health这个请求会维持容器进程活跃阻止它进入休眠。所以即使你一整天没调用过一次容器也在后台“呼吸”着产生费用。解决方案对于低频调用的验证型端点部署时选择 “Azure Kubernetes ServiceAKS” 并启用Cluster Autoscaler它可以将空闲节点缩容到 0或者接受 ACI 的成本但养成严格习惯每次测试完立刻在 Portal 里手动停用Deallocate端点。停用后的端点 URL 不可用但所有配置和模型都保留下次启用只需 2-3 分钟且停用期间 0 费用。这是我个人最常用、也最推荐的做法简单、可控、零风险。5.5 模型效果下降不是算法退化而是“数据漂移”在发生问题现象上线两周后业务方反馈预测价格越来越不准尤其是新能源车偏差动辄上万元。根本原因数据漂移Data Drift。训练数据来自 2015-2020 年的二手车市场而当前业务系统接入的是 2024 年的真实交易数据。新能源车在 2020 年占比不足 5%如今已超 30%其定价逻辑电池衰减、充电网络、政策补贴与燃油车完全不同导致模型对这部分数据的预测能力归零。解决方案在工作区里启用Data Drift Detection功能。它会自动对比生产数据与训练数据的分布差异对fuel-type、engine-size等关键字段生成漂移分数。当fuel-type的漂移分数超过阈值如 0.3系统自动触发告警并启动一个预设的retrain-pipeline用最新的 30 天生产数据重新训练模型。这个闭环才是工业级机器学习系统的真正标志——它不再是一个静态的“一次性交付物”而是一个能感知环境变化、自主进化的“活体”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2634223.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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…