首页 > 其他分享 >保存模型 & 记录参数

保存模型 & 记录参数

时间:2024-09-01 23:03:18浏览次数:3  
标签:loss log val 记录 模型 batch idx 参数 self

保存的模型

在你提供的代码中,模型保存的条件如下:

  1. 验证阶段(_valid_epoch 方法)

    • 在每个 epoch 结束后,模型会进行验证,即使用验证数据集(self.valid_loader)计算验证指标(valid_metric)。
    • 通过 self.valid_step 方法计算每个 batch 的验证指标,最终将这些指标的平均值保存在 valid_metric 中。
  2. 与之前最佳指标进行比较(_metric_better 方法)

    • 当前的 valid_metric 会与之前的最佳指标(self.last_valid_metric)进行比较,比较方法由 _metric_better 函数决定。
    • 如果 self.config.metric_min_betterTrue,则较低的 valid_metric 更好(例如用于损失函数);否则,较高的 valid_metric 更好(例如用于准确率)。
  3. 保存模型的条件

    • 如果当前的 valid_metric 比之前的最佳指标更好,则会执行以下操作:
      • 重置耐心值:将 self.patience 重置为 self.config.patience
      • 保存模型:将模型检查点保存到文件中,并将其路径添加到 top-K 检查点列表中。
      • 检查点文件名包含当前的 epoch 和全局步骤,例如 epoch{self.epoch}_step{self.global_step}.ckpt
  4. 维护 Top-K 检查点(_maintain_topk_checkpoint 方法)

    • _maintain_topk_checkpoint 方法会维护一个基于验证指标的 top-K 最佳检查点列表。
    • 如果列表超过 top-K 限制(self.config.save_topk),则会删除指标最差的检查点,并从磁盘中删除该文件。
    • 这样可以确保只保留 top-K 表现最好的模型检查点,以节省存储空间。
  5. 停止训练

    • 如果验证指标未能改善(self.patience 减少),并且 self.patience 达到零,则训练循环会中断,从而提前结束训练过程。
模型保存条件总结:
  • 模型检查点会在当前验证指标(valid_metric)比历史最佳验证指标更好时保存。此外,系统只保留 top-K 表现最好的模型检查点,其余的会被删除以节省存储空间。

    def train_step(self, batch, batch_idx):
    batch['context_ratio'] = self.get_context_ratio()
    return self.share_step(batch, batch_idx, val=False)

    def valid_step(self, batch, batch_idx):
    batch['context_ratio'] = 0
    return self.share_step(batch, batch_idx, val=True)

    def share_step(self, batch, batch_idx, val=False):
    loss, seq_detail, structure_detail, dock_detail, pdev_detail = self.model(**batch)
    snll, aar = seq_detail
    struct_loss, xloss, bond_loss, sc_bond_loss = structure_detail
    dock_loss, interface_loss, ed_loss, r_ed_losses = dock_detail
    pdev_loss, prmsd_loss = pdev_detail

      log_type = 'Validation' if val else 'Train'
    
      self.log(f'Overall/Loss/{log_type}', loss, batch_idx, val)
    
      self.log(f'Seq/SNLL/{log_type}', snll, batch_idx, val)
      self.log(f'Seq/AAR/{log_type}', aar, batch_idx, val)
    
      self.log(f'Struct/StructLoss/{log_type}', struct_loss, batch_idx, val)
      self.log(f'Struct/XLoss/{log_type}', xloss, batch_idx, val)
      self.log(f'Struct/BondLoss/{log_type}', bond_loss, batch_idx, val)
      self.log(f'Struct/SidechainBondLoss/{log_type}', sc_bond_loss, batch_idx, val)
    
      self.log(f'Dock/DockLoss/{log_type}', dock_loss, batch_idx, val)
      self.log(f'Dock/SPLoss/{log_type}', interface_loss, batch_idx, val)
      self.log(f'Dock/EDLoss/{log_type}', ed_loss, batch_idx, val)
      for i, l in enumerate(r_ed_losses):
          self.log(f'Dock/edloss{i}/{log_type}', l, batch_idx, val)
    
      if pdev_loss is not None:
          self.log(f'PDev/PDevLoss/{log_type}', pdev_loss, batch_idx, val)
          self.log(f'PDev/PRMSDLoss/{log_type}', prmsd_loss, batch_idx, val)
    
      if not val:
          lr = self.config.lr if self.scheduler is None else self.scheduler.get_last_lr()
          lr = lr[0]
          self.log('lr', lr, batch_idx, val)
          self.log('context_ratio', batch['context_ratio'], batch_idx, val)
      return loss
    

标签:loss,log,val,记录,模型,batch,idx,参数,self
From: https://www.cnblogs.com/csjywu01/p/18391270

相关文章

  • 深入理解Java内存模型:对并发编程的影响
    深入理解Java内存模型:对并发编程的影响大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在Java并发编程中,内存模型是一个至关重要的概念,它定义了程序中各个变量的访问规则,以及在多线程环境下如何正确地处理这些变量。Java内存模型(JMM)是Java规范中定义的......
  • 51c大模型~合集45
    #OpenAI家庭机器人NEO登场动作丝滑逼近人类!穿着西装的「人」却专做家务OpenAI支持的明星初创1XTechnologies,发布了最新的通用家务机器人NEO。不仅外形自然拟人,还有仿生设计带来的丝滑动作。不想干的家务,真的可以让机器人帮忙了!继Optimus和擎天柱之后,人形机器人领域又闯入一员猛将......
  • 【综合小项目】—— 爬取数据、数据处理、建立模型训练、自定义数据进行测试
    文章目录一、项目内容二、各步骤的代码实现1、爬取数据2、数据处理3、建立模型训练4、自定义数据进行预测一、项目内容1、爬取数据本次项目的数据是某购物平台中某个产品的优质评价内容和差评内容采用爬虫的selenium方法进行爬取数据内容,并将爬取的内容分别存放......
  • 优雅谈大模型:白话ZeRO 下
    机器学习模型的复杂性和规模不断增长,分布式训练变得比以往任何时候都更加重要。训练具有数千亿参数的大型语言模型(LLMs)将是机器学习基础设施面临的挑战。与传统的分布式计算框架不同的地方在于GPU的分布式训练需要将数据传递给GPU芯片等物理硬件层。GPU设备之间会进行频繁、......
  • 如何改进yolov8网络-结合代码从模型结构改进(附源码)
    第一天:挖掘YOLOv8的潜力:从创新角度分析关键瓶颈引言YOLOv8作为最新一代的目标检测框架,在性能上有了显著提升。然而,为了进一步挖掘其潜力,我们需要从模型的创新点出发,结合代码,详细分析可能存在的瓶颈。这不仅有助于理解YOLOv8的局限性,也为后续优化提供了具体的方向。1.模......
  • 多模态大模型
    ASurveyonMultimodalLargeLanguageModelshttps://arxiv.org/pdf/2306.13549多模态大预言模型,其是基于LLM,同时具有了接收、推理、输出多模态信息的能力。Inlightofthiscomplementarity,LLMandLVMruntowardseachother,leadingtothenewfieldofMultimodalL......
  • 大模型应用开发实战
    在接触AI应用开发的这段时间,我以为会像以前学.net,学java,学vue一样。先整个helloworld,再一步一步学搭功能,学搭框架直到搭一个系统出来。然而,理想总是很丰满,现实很骨感。在实践的过程中各种千奇百怪的问题:概念太多了。你以为就GPT、LLM?太年轻了,huggingface、transformers、torch......
  • 阿里云Qwen2-VL语言模型:特点与实用性解析
    最近,阿里云推出了最新的视觉语言模型——Qwen2-VL。作为一款先进的视觉语言模型,Qwen2-VL的发布无疑为AI领域注入了新的活力。那么,这款模型有哪些特别之处?它的实用性又如何呢?今天我们就来详细解析一下Qwen2-VL的特点与实际应用。一、Qwen2-VL的核心特点1.多分辨率与比例图......
  • 语文套卷练习记录
    目录语文套卷练习记录202412024.8.272023年9月南京零模——仅练习语文套卷练习记录202412024.8.272023年9月南京零模——仅练习【总结】整体上这张试卷难度不大,题目出的感觉有点小烂。连考了两题语言表达的特色,不知道出题人在想啥。好多答案简单的莫名其妙的,都不像真的。......
  • 记录elasticsearch-analysis-dynamic-synonym从8.7.0升级到8.15.0所遇到的问题
    记录elasticsearch-analysis-dynamic-synonym从8.7.0升级到8.15.0所遇到的问题一、问题伊始今天打算用elasticsearch最新版本来学点东西,发现安装es插件就遇到了许多问题,于是便通过此篇博客来记录问题的整个过程。去年我学习用的elasticsearch版本为8.7.0,当时GitHub有一个大佬直......