专门做家居的网站哪些网站可以接生意做

张小明 2025/12/31 20:49:51
专门做家居的网站,哪些网站可以接生意做,精选合肥网站建设,公司网站备案网站名称有什么用突破灾难性遗忘#xff01;基于经验回放EWC的核电站故障诊断增量学习系统完整实现资源-CSDN下载 一、引言#xff1a;当AI遇到遗忘症——灾难性遗忘的挑战 在深度学习领域#xff0c;有一个令人头疼的问题#xff1a;灾难性遗忘#xff08;Catastrophic Forg…突破灾难性遗忘基于经验回放EWC的核电站故障诊断增量学习系统完整实现资源-CSDN下载一、引言当AI遇到遗忘症——灾难性遗忘的挑战在深度学习领域有一个令人头疼的问题灾难性遗忘Catastrophic Forgetting。想象一下你训练了一个能够识别10种核电站故障的智能诊断系统准确率高达95%。但是当系统需要学习第11种新故障时悲剧发生了——它突然忘记了之前学过的所有故障类型准确率暴跌到30%以下。这就是灾难性遗忘的残酷现实。在核电站这样的关键基础设施中故障诊断系统必须能够持续学习随着设备老化、运行条件变化不断出现新的故障模式保持记忆不能忘记已经学过的历史故障类型实时部署不能每次都重新训练整个模型计算成本和时间成本都太高传统的机器学习方法在面对这个问题时显得力不从心。每次新增故障类型都需要重新收集所有历史数据重新训练整个模型可能需要数天甚至数周重新部署系统停机时间成本巨大本文提出的解决方案基于经验回放Experience Replay 弹性权重巩固Elastic Weight Consolidation, EWC的联合策略让AI系统像人类一样在学习新知识的同时不忘旧知识。二、项目背景核电站故障诊断的现实需求2.1 核电站故障诊断的复杂性核电站是一个极其复杂的系统包含反应堆系统核反应堆、控制棒、冷却系统蒸汽系统蒸汽发生器、主蒸汽管道、安全阀给水系统给水管道、给水泵、给水流量控制安全系统高压安注系统、压力安全系统每个系统都可能发生多种故障例如主蒸汽管道破裂可能导致反应堆失压是严重事故冷却剂管道破口会导致冷却剂流失可能引发堆芯熔毁蒸汽发生器传热管破裂SGTR会导致一回路和二回路之间的泄漏给水流量丧失会导致蒸汽发生器干涸掉棒事故控制棒意外掉落导致反应性异常主泵卡轴主循环泵故障影响冷却剂循环安全阀误开启压力安全系统故障高压安注系统意外投入安全系统误动作2.2 数据特点本项目使用的数据来自核电站仿真系统每个故障类型包含多工况数据不同功率水平、不同严重程度时序数据每个样本是时间序列包含多个传感器读数高维特征每个时间步包含多个物理参数压力、温度、流量等数据格式初始数据集10种故障类型每种包含多个工况的CSV文件增量数据集分阶段新增的故障类型三、核心技术原理深度解析3.1 灾难性遗忘的数学本质要理解如何解决灾难性遗忘首先需要理解它的数学本质。假设我们有一个神经网络模型 $f_\theta(x)$参数为 $\theta$。在任务A上训练后我们得到最优参数 $\theta_A^$$$\theta_A^* \arg\min_\theta \mathcal{L}A(\theta)$$其中 $\mathcal{L}A(\theta)$ 是任务A上的损失函数。当我们在任务B上继续训练时目标是$$\theta_B^* \arg\min_\theta \mathcal{L}B(\theta)$$问题在于如果直接优化 $\mathcal{L}B(\theta)$参数会从 $\theta_A^$ 移动到 $\theta_B^$导致模型在任务A上的性能急剧下降。3.2 经验回放Experience Replay机制核心思想在学习新任务时同时回顾旧任务的样本。实现方式在训练初始任务时保存一部分代表性样本到回放缓冲区Replay Buffer在训练新任务时从回放缓冲区中采样旧样本与新样本混合训练数学表达$$\mathcal{L}{total} \mathcal{L}{new}(\theta) \alpha \cdot \mathcal{L}{replay}(\theta)$$其中$\mathcal{L}{new}(\theta)$ 是新任务的损失$\mathcal{L}{replay}(\theta)$ 是回放样本的损失$\alpha$ 是平衡系数优势简单直观易于实现不需要修改网络结构效果显著局限性需要存储历史样本内存开销回放样本的选择策略影响性能对于大规模数据回放缓冲区可能不够大3.3 弹性权重巩固EWC机制核心思想通过Fisher信息矩阵量化每个参数对旧任务的重要性对重要参数施加约束防止其过度偏离最优值。Fisher信息矩阵$$F_i \mathbb{E}{x \sim p(x|y), y \sim p(y)} \left[ \left( \frac{\partial \log p(y|x, \theta)}{\partial \theta_i} \right)^2 \right]$$Fisher信息矩阵 $F_i$ 衡量参数 $\theta_i$ 对模型输出的敏感度。$F_i$ 越大说明 $\theta_i$ 对任务越重要。EWC损失函数$$\mathcal{L}{EWC}(\theta) \mathcal{L}{new}(\theta) \frac{\lambda}{2} \sum_i F_i (\theta_i - \theta_i^)^2$$其中$\theta_i^$ 是旧任务的最优参数$F_i$ 是参数 $\theta_i$ 的Fisher信息$\lambda$ 是正则化系数控制约束强度物理意义如果 $F_i$ 很大参数重要则 $(\theta_i - \theta_i^)^2$ 的惩罚很大参数不能偏离太远如果 $F_i$ 很小参数不重要则允许参数自由调整优势不需要存储原始数据只需要存储Fisher信息矩阵和最优参数理论基础扎实内存效率高局限性假设参数空间是二次的可能不够准确Fisher信息矩阵的计算需要额外开销对于多任务场景需要累积多个Fisher矩阵3.4 联合策略Replay EWC为什么联合使用互补性Replay提供显式的旧任务样本让模型直接看到旧数据EWC提供隐式的参数约束防止参数过度偏离双重防护Replay数据层面的防护EWC参数层面的防护鲁棒性即使回放样本选择不当EWC仍能提供保护即使EWC的Fisher估计不准确Replay仍能发挥作用联合损失函数$$\mathcal{L}{total} \mathcal{L}{replay}(\theta) \mathcal{L}{new}(\theta) \lambda{EWC} \cdot \mathcal{L}{EWC}(\theta)$$四、网络架构设计ResNet1D详解4.1 为什么选择ResNet1D一维时序数据的特点核电站传感器数据是时间序列每个时间步包含多个特征压力、温度、流量等需要捕捉时序依赖关系ResNet的优势残差连接解决深层网络的梯度消失问题批归一化加速训练提高稳定性层次化特征提取从局部特征到全局特征4.2 ResNet1D架构详解输入格式形状(batch_size, sequence_length, num_features)例如(64, 90, 50) 表示64个样本每个样本90个时间步每个时间步50个特征网络结构输入 (B, L, C)↓转置 (B, C, L) # Conv1d需要通道在前↓Conv1d(k7, s2) BN ReLU↓MaxPool1d(k3, s2)↓Layer1: 2个残差块64通道↓Layer2: 2个残差块128通道stride2↓Layer3: 2个残差块256通道stride2↓Layer4: 2个残差块512通道stride2↓AdaptiveAvgPool1d(1) # 全局平均池化↓Flatten↓Linear(512, num_classes)↓输出 (B, num_classes)残差块结构class ResidualBlock1D(nn.Module):def __init__(self, in_channels, out_channels, stride1):# 第一个卷积可能改变通道数和尺寸self.conv1 nn.Conv1d(in_channels, out_channels,kernel_size3, stridestride, padding1)self.bn1 nn.BatchNorm1d(out_channels)# 第二个卷积保持通道数和尺寸self.conv2 nn.Conv1d(out_channels, out_channels,kernel_size3, stride1, padding1)self.bn2 nn.BatchNorm1d(out_channels)# 下采样层如果需要if stride ! 1 or in_channels ! out_channels:self.downsample nn.Sequential(nn.Conv1d(in_channels, out_channels,kernel_size1, stridestride),nn.BatchNorm1d(out_channels))def forward(self, x):identity xout self.conv1(x)out self.bn1(out)out F.relu(out)out self.conv2(out)out self.bn2(out)# 残差连接if self.downsample is not None:identity self.downsample(x)out identity # 关键残差连接out F.relu(out)return out关键设计点滑动窗口将长时序数据切分成固定长度的窗口如90个时间步动态输出层在增量学习时扩展分类层以适应新类别数特征提取器共享所有任务共享特征提取层只扩展分类层五、完整实现代码解析5.1 数据加载与预处理滑动窗口函数def Slidingwindow(dataX, STEPS10):将长时序数据切分成固定长度的窗口输入: dataX shape (T, F) - T个时间步F个特征输出: X shape (T-STEPS1, STEPS, F) - 多个窗口X []for i in range(dataX.shape[0] - STEPS):X.append(dataX[i:i STEPS, :])return np.array(X, dtypenp.float32)数据加载函数def load_data(data_path, class_mapping, steps90, test_split0.2):从指定路径加载数据自动识别类别参数:data_path: 数据根目录class_mapping: 类别名称到ID的映射steps: 滑动窗口长度test_split: 测试集比例返回:X_tensor: 特征张量 (N, steps, features)Y_tensor: 标签张量 (N,)train_indices: 训练集索引test_indices: 测试集索引class_names: 类别名称列表X []Y []class_names []# 遍历每个类别文件夹for class_name in os.listdir(data_path):if class_name in class_mapping:class_names.append(class_name)class_path os.path.join(data_path, class_name)# 遍历该类别的所有CSV文件for csv_file in os.listdir(class_path):csv_path os.path.join(class_path, csv_file)try:data pd.read_csv(csv_path, encodinggbk)if data.shape[0] steps:continue# 滑动窗口切分x Slidingwindow(data.values, STEPSsteps)X.append(x)Y.append(np.array([class_mapping[class_name]] * x.shape[0]))except Exception as e:print(f读取文件 {csv_path} 时出错: {e})# 合并所有数据X np.concatenate(X, axis0)Y np.concatenate(Y, axis0)# 转换为PyTorch张量X_tensor torch.tensor(X, dtypetorch.float32)Y_tensor torch.tensor(Y, dtypetorch.long)# 划分训练集和测试集dataset_size len(X_tensor)indices list(range(dataset_size))split int(np.floor(test_split * dataset_size))np.random.shuffle(indices)train_indices, test_indices indices[split:], indices[:split]return X_tensor, Y_tensor, train_indices, test_indices, class_names5.2 回放样本选择策略按比例选择回放样本def select_replay_samples_by_ratio(X, Y, indices, ratio0.5):每类按固定比例抽取样本作为回放样本参数:X: 特征未使用保持接口一致性Y: 标签indices: 候选样本索引ratio: 抽取比例0~1返回:replay_indices: 回放样本索引列表replay_indices []unique_classes torch.unique(Y[indices])for cls in unique_classes:# 找到该类在候选集中的所有索引class_indices [idx for idx in indices if Y[idx] cls]class_total len(class_indices)# 按比例计算需要抽取的数量num_samples max(1, int(class_total * ratio))num_samples min(num_samples, class_total)# 不放回抽样if num_samples class_total:sampled np.random.choice(class_indices, num_samples, replaceFalse)else:sampled class_indicesreplay_indices.extend(sampled)return replay_indices为什么选择这个策略简单有效不需要复杂的采样算法类别平衡每个类别都按相同比例抽取保持类别平衡可扩展随着类别数增加回放样本库也会增长5.3 EWC实现详解EWC类实现class EWC:def __init__(self, model, dataloader, device, lambda_ewc10000):self.model modelself.dataloader dataloaderself.device deviceself.lambda_ewc lambda_ewc# 获取所有可训练参数self.params {n: p for n, p in self.model.named_parameters()if p.requires_grad}# 初始化Fisher信息矩阵self.fisher {n: torch.zeros_like(p.data, deviceself.device)for n, p in self.params.items()}# 计算Fisher信息矩阵self._compute_fisher()# 保存旧参数当前最优参数self.old_params {n: p.clone().detach().to(self.device)for n, p in self.params.items()}def _compute_fisher(self):计算Fisher信息矩阵original_mode self.model.trainingself.model.eval()criterion nn.CrossEntropyLoss()# 计算总样本数用于归一化total_samples 0for inputs, _ in self.dataloader:total_samples inputs.size(0)# 累加梯度平方for inputs, targets in self.dataloader:inputs, targets inputs.to(self.device), targets.to(self.device)self.model.zero_grad()outputs self.model(inputs)loss criterion(outputs, targets)loss.backward()# 累加每个参数的梯度平方for n, p in self.params.items():if p.grad is not None:self.fisher[n] (p.grad ** 2) / total_samples# 恢复模型原始模式self.model.train(original_mode)def penalty(self):计算EWC惩罚项loss 0.0for n, p in self.params.items():# 确保所有张量在同一设备fisher self.fisher[n]old_param self.old_params[n]# EWC惩罚F_i * (θ_i - θ_i^*)^2loss (fisher * (p - old_param) ** 2).sum()return self.lambda_ewc * loss / 2关键点解析Fisher信息矩阵计算在旧任务的最优参数上计算使用回放数据或旧任务数据对梯度平方求平均归一化惩罚项计算对每个参数计算 $(θ_i - θ_i^)^2$乘以对应的Fisher信息 $F_i$求和后乘以正则化系数 $\lambda_{EWC}$参数更新在训练新任务时总损失 分类损失 EWC惩罚通过反向传播更新参数重要参数$F_i$大的更新幅度会被限制5.4 增量训练流程核心训练函数def train_with_replay_and_incremental(model, replay_loader, incremental_loader,test_loader, history_test_loader, incremental_test_loader,ewc, epochs100, lr0.0001):使用ReplayEWC进行增量训练参数:model: 待训练的模型replay_loader: 回放数据加载器包含所有历史回放样本incremental_loader: 增量数据加载器当前阶段的新数据test_loader: 合并测试集加载器history_test_loader: 历史类别测试集加载器incremental_test_loader: 增量类别测试集加载器ewc: EWC对象epochs: 训练轮数lr: 学习率model.train()optimizer optim.Adam(model.parameters(), lrlr)criterion nn.CrossEntropyLoss()train_losses []test_accuracies []initial_test_accuracies []incremental_test_accuracies []for epoch in range(epochs):running_loss 0.0correct 0total 0# 创建迭代器replay_iter iter(replay_loader)increincremental_iter iter(incremental_loader)# 确定最大迭代次数max_iter max(len(replay_loader), len(incremental_loader))for i in range(max_iter):# 处理回放数据try:replay_inputs, replay_targets next(replay_iter)replay_inputs, replay_targets replay_inputs.to(device), replay_targets.to(device)optimizer.zero_grad()replay_outputs model(replay_inputs)replay_loss criterion(replay_outputs, replay_targets)# 添加EWC惩罚replay_penalty ewc.penalty()replay_loss replay_loss replay_penaltyreplay_loss.backward()optimizer.step()running_loss replay_loss.item(), predicted replay_outputs.max(1)total replay_targets.size(0)correct predicted.eq(replay_targets).sum().item()except StopIteration:replay_iter iter(replay_loader)# 处理增量数据try:inc_inputs, inc_targets next(incremental_iter)inc_inputs, inc_targets inc_inputs.to(device), inc_targets.to(device)optimizer.zero_grad()inc_outputs model(inc_inputs)inc_loss criterion(inc_outputs, inc_targets)# 添加EWC惩罚inc_penalty ewc.penalty()inc_loss inc_loss inc_penaltyinc_loss.backward()optimizer.step()running_loss inc_loss.item(), predicted inc_outputs.max(1)total inc_targets.size(0)correct predicted.eq(inc_targets).sum().item()except StopIteration:incremental_iter iter(incremental_loader)# 计算平均损失epoch_loss running_loss / (2 * max_iter)epoch_acc correct / totaltrain_losses.append(epoch_loss)# 评估模型test_accuracy, , test_model(model, test_loader)initial_test_accuracy, , test_model(model, history_test_loader)incremental_test_accuracy, , test_model(model, incremental_test_loader)test_accuracies.append(test_accuracy)initial_test_accuracies.append(initial_test_accuracy)incremental_test_accuracies.append(incremental_test_accuracy)print(fEpoch {epoch 1}/{epochs}, 训练Loss: {epoch_loss:.4f}, 训练Acc: {epoch_acc:.4f})print(f 合并测试集Accuracy: {test_accuracy:.4f})print(f 历史类别测试集Accuracy: {initial_test_accuracy:.4f})print(f 当前增量类别测试集Accuracy: {incremental_test_accuracy:.4f})return model, train_losses, test_accuracies, initial_test_accuracies, incremental_test_accuracies**训练流程的关键点**1. **混合训练**每个epoch中回放数据和增量数据交替训练2. **双重损失**回放数据和增量数据都添加EWC惩罚3. **多维度评估**同时评估合并准确率、历史准确率、增量准确率### 5.5 主函数完整的增量学习流程**主函数核心逻辑**ythondef main():# 超参数设置batch_size 64initial_epochs 100learning_rate 0.001steps 90 # 时间序列长度replay_ratio 0.5 # 回放样本比例incremental_epochs 100lambda_ewc 10000 # EWC正则化系数# 1. 获取初始类别映射initial_classid get_initial_class_mapping(INITIAL_DATA_PATH)# 2. 获取增量学习阶段incremental_stages, incremental_class_mappings get_incremental_stages(INCREMENTAL_STAGES_PATH)# 3. 分配类别IDincremental_class_mappings, combined_class_mappings assign_class_ids(initial_classid, incremental_class_mappings)# 4. 加载初始数据并训练初始模型X_initial, Y_initial, train_indices_initial, test_indices_initial, _ load_data(INITIAL_DATA_PATH, initial_classid, stepssteps)model create_resnet_model(input_sizeX_initial.shape[2],num_classeslen(initial_classid)).to(device)# 训练初始模型model, initial_train_losses, initial_test_accuracies train_model(model, initial_train_loader, initial_test_loader,epochsinitial_epochs, lrlearning_rate)# 5. 选择初始回放样本replay_indices_initial select_replay_samples_by_ratio(X_initial, Y_initial, train_indices_initial, ra
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站建设内容大全免费学编程的app

macOS iSCSI存储扩展完整攻略:让网络存储变身本地磁盘 【免费下载链接】iSCSIInitiator iSCSI Initiator for macOS 项目地址: https://gitcode.com/gh_mirrors/is/iSCSIInitiator 还在为Mac内置存储空间频频告急而困扰吗?你可能经历过这样的场景…

张小明 2025/12/31 8:36:39 网站建设

网上书城网站开发方案站长之家关键词挖掘

Venera漫画应用本地导入完全指南:5分钟掌握CBZ、EPUB、PDF格式支持 【免费下载链接】venera A comic app 项目地址: https://gitcode.com/gh_mirrors/ve/venera 想要在手机上轻松阅读自己收藏的漫画吗?Venera漫画应用提供了强大的本地导入功能&am…

张小明 2025/12/31 8:36:34 网站建设

深圳网站建设公司jsp北京哪里能学做网站

5分钟快速获取免费OpenAI API密钥完整指南 【免费下载链接】FREE-openai-api-keys collection for free openai keys to use in your projects 项目地址: https://gitcode.com/gh_mirrors/fr/FREE-openai-api-keys 你是否曾经梦想着能够免费使用OpenAI的强大AI能力&…

张小明 2025/12/31 13:18:38 网站建设

永州做网站的公司网站建站平台是什么

三相四桥臂逆变器MATLAB/Simulink仿真模型,接不平衡负载时的调制算法。 接非线性负载时的多PR控制器并联算法。 提供仿真模型、设计报告及参考文献三相四桥臂逆变器这玩意儿在新能源和微电网里属于硬核装备。接上吹风机、电机这类不平衡负载时,常规的三桥…

张小明 2025/12/30 19:47:10 网站建设

长沙 网站seo服务 网络服务广州昨天发生重大新闻

## 一、什么是 Flutter?**Flutter** 是由 Google 开发的开源 UI 软件开发工具包,用于为移动、Web、桌面和嵌入式设备构建高性能、高保真的应用程序。它使用 **Dart** 编程语言,并允许开发者通过一套代码库同时为 Android 和 iOS 创建原生级体…

张小明 2025/12/31 13:18:34 网站建设

免费网站模板html前端开发入门薪水

VBAP(Vertriebsbeleg: Positionsdaten)是 SAP SD 模块中销售凭证行项目的核心表,存储销售订单 / 合同 / 询价 / 报价等单据行项级的基础信息(如物料、数量、价格、交货相关),是连接销售前端与物流、财务的关…

张小明 2025/12/31 13:18:32 网站建设