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

长沙市住房和城乡建设部网站中海外交通建设有限公司网站

长沙市住房和城乡建设部网站,中海外交通建设有限公司网站,企业网络费用,帝国网站seo一、PyTorch如何修改模型#xff08;魔改#xff09;? 可以参考这个链接#xff0c;看了一下还不错#xff1a; PyTorch如何修改模型#xff08;魔改#xff09;_模型魔改-CSDN博客 二、替换模型#xff0c;一般除了注意输入输出一致#xff0c;还有其他要修改的吗?…一、PyTorch如何修改模型魔改? 可以参考这个链接看了一下还不错 PyTorch如何修改模型魔改_模型魔改-CSDN博客 二、替换模型一般除了注意输入输出一致还有其他要修改的吗? 替换模型backbone 或者整个网络除了保持输入输出一致还需要注意以下几个方面 下面是比较通用的 深度学习模型替换 checklist在项目里替换 backbone 或模型时可以逐条对照能避免很多坑。 一、输入输出维度对齐 输入维度 新模型的输入 shape 要和原模型的输入一致例如 [B, L, D]或 [B, C, L]。 如果新模型需要额外输入如 mask、time_embedding要在 forward 或 dataloader 中添加。 输出维度 新模型输出必须满足任务要求比如预测 pred_len 步 [B, pred_len, D]。 如果输出多余比如返回了 hidden states 或 attention maps需要在 forward 里加一层 projection 或 select只保留训练所需的部分。 二、配置参数configs 确认新模型需要的超参数例如 num_layers, kernel_size, hidden_dim。 更新 configs避免缺失参数报错。 对冗余的旧参数如果新模型不用可以在 __init__ 里忽略但不要误用。 三、训练循环适配 前向传播 调用 model(x_enc, x_mark_enc, ...) 返回结果确保能和 loss 计算对上。 loss 函数 有的模型输出 [B, pred_len, D]有的可能 [B, D, pred_len]要确保 loss(y_pred, y_true) 的维度一致。 分类/回归任务的 loss 可能不同确保对应好。 优化器参数 新模型参数规模可能变化较大要重新检查 lr, weight_decay。 四、初始化与权重 如果新模型需要特定初始化如 Transformer 的 xavier_uniform要显式写上。 如果加载预训练权重确保 state_dict 的 key 和 shape 匹配。 五、推理与评估 forecast/inference 确保预测时能正确切片如 [:, -pred_len:, :]。 评估指标 检查指标函数和新模型输出格式匹配。 六、调试建议 先跑一个 batch 在 forward 前后 print(x.shape, y.shape)确认输入输出对齐。 检查梯度 loss.backward() 后看模型参数是否有 grad。 小数据集 sanity check 在小数据集上过拟合几个 batch看能否收敛到 0 附近。 七、额外注意 如果替换的是 backbone 而不是整个模型要确保和 head 的接口一致比如 feature dim。 如果模型里有时间戳、mask 之类的辅助输入替换时要保留逻辑。 如果是序列到序列任务注意 decoder 是否兼容。 三、pytorch对已有模型的更改常用的操作 参照pytorch对已有模型的更改常用的操作_pytorch修改模型参数-CSDN博客 四、小数据集 sanity check 做“小数据集 sanity check”的目的就是让模型在极小的一组样本上迅速“背题”训练损失接近 0准确率接近 100%。如果连背题都背不下来基本可以确定是数据/标签/网络/损失/优化某一环节有 bug。 下面给你一套可直接套用的做法PyTorch 核心原则 用极小数据比如 132 个样本甚至单个 batch。 关掉一切正则化dropout0、weight_decay0、数据增广/掩码关闭。 固定随机种子保证复现。 不使用 AMP / 多卡 / DataParallel先在单卡上简化验证。 较大的训练轮数1001000 step 不等直到 loss→~0。 每次都在相同那一个 batch上反复训练不 shuffle。 最快路径对你现在的工程 目标在你现有 DataLoader 上取出一个 batch然后在这个 batch 上反复训练。 1禁用易干扰项 模型构造时把 head_dropout0、backbone_dropout0。 优化器 weight_decay0。 训练时把 AMPautocast/GradScaler先关掉。 不用 DataParallel先注释掉那两行。 你的 MyDataSet(hard...)sanity check 里把 hardNone并设定 F_MASK 不做掩码如恒等或常量不要随机。 2抓一个 batch 并反复训练 # 1) 构造很小的数据加载器或直接用现有的——关键是先拿到一个 batch training_loader, validing_loader make_loader(batch_size16, hardNone) # hardNone 不做掩码 batch next(iter(training_loader)) # 固定同一批数据 x_small, y_small batch[0].to(device), batch[-1].to(device)# 2) 简化单卡、关 AMP、关 scheduler model model.to(device) model.train() for m in model.modules():if isinstance(m, torch.nn.Dropout):m.p 0.0optimizer torch.optim.Adam(model.parameters(), lr1e-3, weight_decay0.0) # weight_decay0 # 不用 lr_scheduler# 3) 反复在同一个 batch 上训练 for step in range(1000): # 视情况 200~1000optimizer.zero_grad()outputs model(x_small) # 你的模型输出 [B, L, 12]loss nn.CrossEntropyLoss()(outputs.view(-1, 12), y_small.view(-1))loss.backward()optimizer.step()if step % 20 0:with torch.no_grad():preds outputs.argmax(-1)acc (preds y_small).float().mean().item()print(fstep {step:4d} | loss {loss.item():.4f} | acc {acc:.4f})预期loss 会持续下降acc 会持续上升最终非常接近 1。 如果下降很慢把 lr 调高到 3e-3、1e-2 试试sanity check 不怕过拟合或再减小 batch 里的样本数量。 如果你想用“更小数据集而不是单 batch” 在你已有的 make_loader 基础上在构造 d_train 时只取前 N 条比如 32 条或者把 mix_data_gen(...) 的数量参数改得极小如 1、1、1。 DataLoader(num_workers0, shuffleFalse)保证始终同序。 batch_size 设为全量比如 32训练循环同上。 收敛不了时的排查顺序 检查标签范围CrossEntropy 要求标签是 [0, num_classes-1] 的 LongTensor。你代码里 targets np.array(...).astype(np.int64) - 1确认没有负数或越界。 输出维度对齐你的 outputs.view(-1, 12) 和 targets.view(-1) 要严格匹配且 12 与真实类别数一致。 数据是否全为常数/全零打印 x_small.mean(), x_small.std() 看是否正常。 梯度是否在更新打印几个参数的 p.grad.abs().mean() 看是否为 None 或为 0。 学习率过小不收敛过大发散。sanity check 推荐 1e-3 ~ 1e-2 之间快速试。 关闭一切正则确认 dropout0、weight_decay0、mask/augment 关闭。 模型是否有 requires_gradFalse 的层特别是你之前 VisionTS 冻结参数的逻辑sanity check 要确保你训练的那部分确实 requires_gradTrue。 AMP 相关先完全关闭你之前报过“不需要梯度”的错误AMP/no_grad() 很容易踩坑。 一个极简“单文件版”模板方便复制粘贴 import torch, torch.nn as nntorch.manual_seed(3407) device torch.device(cuda:0 if torch.cuda.is_available() else cpu)model YourModel(..., head_dropout0., backbone_dropout0.).to(device) # 把 dropout 设 0 for m in model.modules():if isinstance(m, nn.Dropout):m.p 0.0optimizer torch.optim.Adam(model.parameters(), lr1e-3, weight_decay0.0) criterion nn.CrossEntropyLoss()# 准备一个固定 batch确保 targets 是 LongTensor 且在 [0, C-1] x_small torch.randn(8, 1024, 5, 128, devicedevice) # 按你的输入形状 y_small torch.randint(low0, high12, size(8, 1024), devicedevice) # [B, L]for step in range(500):optimizer.zero_grad()out model(x_small) # [B, L, 12]loss criterion(out.view(-1, 12), y_small.view(-1))loss.backward()optimizer.step()if step % 50 0:with torch.no_grad():acc (out.argmax(-1) y_small).float().mean().item()print(step, loss.item(), acc)什么时候算通过 几百个 step 内loss 显著下降通常 0.1acc 接近 100%。 如果做不到多半是实现或数据对齐的问题优先按上面的排查顺序逐条排。 需要的话你把你当前想 sanity check 的具体模型名和构造参数贴一下我可以按你的工程结构给你一段“直接跑”的最小脚本帮你对齐输入输出与损失。
http://www.pierceye.com/news/660158/

相关文章:

  • 深圳优秀网站建设品牌策略
  • 上海市建设机械行业协会网站石家庄最新招聘
  • Wordpress垂直类目站模版建设官网入口
  • 网站建设发布平台网络界面设计
  • rss 网站插件国内哪个网站做水产比较大
  • 做营销看的网站有哪些内容芜湖做网站推广有哪些公司
  • 网站建设岗位说明新网金商网站
  • 网站域名使用费多少正规抖音代运营公司排名
  • 网站建设后需要交费吗物流公司电话
  • 网站建设 福州wordpress静态文件目录下
  • 鸿顺里网站建设汕头网站排名优化报价
  • 揭阳自助建站软件社区网站建设资金申请
  • 牟平做网站衡水网页网站建设
  • 蒙文门户网站建设phpok企业建站系统
  • 域名注册网站的域名哪里来的楚雄建网站
  • 专门教ps的网站简单的app开发制作
  • 电商网站建设综述湖北seo网站设计
  • 南京做网站营销网站后台忘记账号密码
  • 敦化建设局网站饰品做国际贸易哪些网站
  • 网站做js跳转怎么创建公司
  • 网站建设合同需要交印花税吗怎么做网站卖美瞳
  • 小程序价格为什么比网站建设高自定义wordpress的实用技巧
  • 企业网站模板源码有哪些报价网站制作
  • 网站建设与网页设计实训报告二级建造师建设云网站
  • 网站后缀gov汕头网站建设小程序
  • 一个空间做多个网站wordpress大改动
  • 桂林北站到机场大巴专线时刻表wordpress 分类 标签
  • 自媒体网站源码模板dede重庆永川网站建设报价
  • 国外酷炫网站网页前端设计流程
  • 子午谷网站建设世界杯网页设计素材