添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

ModelCheckpoint

该类通过监控设置的metric定期保存模型,LightningModule 中使用 log() 或 log_dict() 记录的每个metric都是监控对象的候选者;更多的信息可以进入 此链接 浏览。训练完成后,在日志中使用 best_model_path 检索最佳checkpoint的路径,使用 best_model_score 检索其分数

pytorch_lightning.callbacks.ModelCheckpoint(dirpath=None, filename=None, monitor=None, verbose=False, save_last=None, save_top_k=1, save_weights_only=False, mode=‘min’, auto_insert_metric_name=True, every_n_train_steps=None, train_time_interval=None, every_n_epochs=None, save_on_train_epoch_end=None)

  • dirpath(Union[str, Path, None])–保存模型文件的路径;默认情况下,dirpath 为 None 并将在运行时设置为 Trainer 的 default_root_dir 或 weights_save_path 参数指定的位置,如果 Trainer 使用logger,则路径还将包含logger名称和版本
# custom path,自定义路径
# saves a file like: my/path/epoch=0-step=10.ckpt,文件名会自动由epoch和step构成
checkpoint_callback = ModelCheckpoint(dirpath='my/path/')
  • filename(Optinal[str])–checkpoint文件名;可以包含要自动填充的命名格式选项;默认情况下,文件名是 None 并将设置为 ‘{epoch}-{step}’
# save any arbitrary metrics like `val_loss`, etc. in name,将感兴趣的metrics保存在文件名中
# saves a file like: my/path/epoch=2-val_loss=0.02-other_metric=0.03.ckpt
checkpoint_callback = ModelCheckpoint(
...     dirpath='my/path',
...     filename='{epoch}-{val_loss:.2f}-{other_metric:.2f}'
... )
  • monitor(Optional[str])–被监控的值;默认情况下,它是 None ,它只为最后一个 epoch 保存一个检查点
  • verbose(bool)–详细模式;默认为False
  • save_last(Optional[bool])–为True时,无论训练过程中是否有checkpoint文件保存,在训练结束后都会保存一个名为last.ckpt的checkpoint文件。这允许以确定的方式访问最新的checkpoint文件;默认为None
  • save_top_k(int)–如果save_top_k=k,基于设置的检测对象,其最好的k个模型会被保存;如果save_top_k=0,没有模型会被保存;如果save_top_k=-1,所有模型都会保存。注意,监视器是每every_n_epochs个epoch会被检查一次。如果save_top_k>2并且在一次epoch多次调用回调,保存文件的名称将附加以 v1 开头的版本计数
  • mode(str)–{min,max}其中之一。如果save_top_k> != 0,覆盖当前保存文件的决定是基于监控值的最大化或最小化做出的;如对于val_acc,应该越大越好,要设置max,而对于val_loss,应该越小越好,要设置为min
  • auto_insert_metric_name(bool)–为True时,保存的checkpoint文件名会包含metric名称。例如,带有 epoch 1 和 acc 1.12 的 filename=‘checkpoint_{epoch:02d}-{acc:02.0f} 将解析为 checkpoint_epoch=01-acc=01.ckpt。当metric名称中含有’/'时,设置为False较好,否则会导致生成额外的文件夹,如filename=‘epoch={epoch}-step={step}-val_acc={val/acc:.2f}’, auto_insert_metric_name=False
  • every_n_train_steps(Optional[int])–checkpoint文件两次保存之间的step数。如果every_n_train_steps = None或every_n_train_steps = 0,在训练过程中不保存checkpoint文件。该值必须是None或非负值,并且 其必须与train_time_interval 和 every_n_epochs 互斥
  • train_time_interval(Optional[timedelta])–以指定的时间间隔监控检checkpoints;出于实际目的,不能小于处理单个训练批次所需的时间;不能保证在指定的确切时间执行,但应该接近。并且 其必须与every_n_train_steps 和 every_n_epochs 必须互斥
  • every_n_epochs(Optional[int])–checkpoints文件两次保存之间的epoch数;必须是None或非负值;将其设置为every_n_epochs=0可以禁止save_top_k;此参数不影响 save_last=True 检查点的保存;如果every_n_epochs,every_n_train_steps和train_time_interval都为None,将在每个epoch结束时保存一个checkpoint文件(相当于every_n_epochs=1)如果every_n_epochs=None,且every_n_train_steps != None或train_time_interval != None时,在每个epoch结束时保存保存失效,(相当于every_n_epochs=0);every_n_epochs必须与every_n_train_steps 和 train_time_interval 互斥
  • save_on_train_epoch_end(Optional[bool])–是否在训练周期结束时运行检查点。如果是 False,则检查在验证结束时运行

简单案例代码

>>> from pytorch_lightning import Trainer
>>> from pytorch_lightning.callbacks import ModelCheckpoint
# saves checkpoints to 'my/path/' at every epoch
>>> checkpoint_callback = ModelCheckpoint(dirpath='my/path/')
>>> trainer = Trainer(callbacks=[checkpoint_callback])
# save epoch and val_loss in name
# saves a file like: my/path/sample-mnist-epoch=02-val_loss=0.32.ckpt
>>> checkpoint_callback = ModelCheckpoint(
...     monitor='val_loss',
...     dirpath='my/path/',
...     filename='sample-mnist-{epoch:02d}-{val_loss:.2f}'
... )
# save epoch and val_loss in name, but specify the formatting yourself (e.g. to avoid problems with Tensorboard
# or Neptune, due to the presence of characters like '=' or '/')
# saves a file like: my/path/sample-mnist-epoch02-val_loss0.32.ckpt
>>> checkpoint_callback = ModelCheckpoint(
...     monitor='val/loss',
...     dirpath='my/path/',
...     filename='sample-mnist-epoch{epoch:02d}-val_loss{val/loss:.2f}',
...     auto_insert_metric_name=False
... )
# retrieve the best checkpoint after training
checkpoint_callback = ModelCheckpoint(dirpath='my/path/')
trainer = Trainer(callbacks=[checkpoint_callback])
model = ...
trainer.fit(model)
checkpoint_callback.best_model_path  # 直接获取最好的模型保存的路径

同时保存和恢复多个checkpoint的回调是支持的,可浏览官方文档学习使用

模型手动保存

model = Pytorch_Lightning_Model(args)
train.fit(model)
train.save_checkpoint(example.ckpt)
                                    利用 **every_n_train_steps 、train_time_interval 、every_n_epochs **设置保存 checkpoint 的按照步数、时间、epoch数来保存 checkpoints 或模型,注意三者互斥,如果要同时实现对应的功能需要创建多个 MODELCHECKPOINT。在训练深度神经网络时,如果训练时间较长,我们通常希望在训练过程中定期保存模型的参数,以便稍后从该点恢复训练或进行推理。只能设置为 -1,0,1,分别表示保存所有的模型,不保存模型和保存最后一个模型。
                                    保存ckpt的时候,可以按照modelcheckpoint 的every_n_train_steps 进行保存。如果metrics_over_trainsteps_checkpoint 的 every_n_train_steps 与之一样的话,这样是无法在多个ckpt 进行打分,适当选择留 ckpt的。所以,metrics_over_trainsteps_checkpoint 的 every_n_train_steps需要大于modelcheckpoint 的every_n_train_steps。
from pytorch_lightning.callbacks import ModelCheckpoint
class LitAutoEncoder(LightningModule):
    def validation_step(self, batch, batch_idx):
        x, y = batch
        y_hat = self.backbone(x)
        # 1. 计算loss
                                    pytorch-lightning 是建立在pytorch之上的高层次模型接口。pytorch-lightning 之于 pytorch,就如同keras之于 tensorflow.pytorch-lightning 有以下一些引人注目的功能:可以不必编写自定义循环,只要指定loss计算方法即可。可以通过callbacks非常方便地添加CheckPoint参数保存、early_stopping 等...
                                    callback回调就是在合适的时候调用相应的函数,比如在训练开始前,训练结束后,每个epoch前后等等。training_step(), validation_step(), test_step()等函数都是在合适的时候被调用的。需要注意的是,montior指定的指标必须在LightningModule类中指定。另外也可以使用YAML文件配置。
                                    2、在训练阶段的model.compile之后加入下列代码实现每一次epoch(period=1)保存最好的参数。4、在model.fit添加callbacks=[checkpoint]实现回调。1、从keras.callbacks导入ModelCheckpoint类。3、在训练阶段的model.fit之前加载先前保存的参数。在每个epoch后保存模型到filepath。
                                    领域,我们仍有许多未解决的问题需要开发新的算法,还有许多未解决的问题需要设计新的架构。但是,启动笔记本的机器的当前工作目录不是在云笔记本中保存检查点的好选择,因为它们的底层基础设施具有瞬态性,如上一节所述。)、半监督学习和自监督学习,它们扩展了 ML 领域的可能性,而这些不仅仅是先进的模型,但创造艺术的超酷方式和很多乐趣。虽然这本书的目的是让那些正在开始他们的 DL 之旅的人开始并运行,但我们希望那些来自其他框架的人也发现这是一种快速而简单地过渡到 PyTorch Lightning 的方法。
                                    PyTorch闪电片段
围绕PyTorch Lightning收集的有用工具。 
pip install git+https://github.com/awaelchli/pytorch-lightning-snippets
监控培训数据
 :star: 这已移动到!  :star:
 回调,记录每个传递给training_step方法的张量的直方图。 对于调试和健全性检查预处理管道很有用。 目前支持TensorBoard和WandbLogger。
 from monitor import TrainingDataMonitor
from pytorch_lightning import Trainer
model = YourLightningModule ()
monitor = TrainingDataMonitor ( row_log_interval = 25 )
trainer = Trai
 PyTorch LMS用户最近打开了一个问题,要求社区支持以将LMS集成到PyTorch的正式版本中:
 这是一个很好的机会,可以收集所有用户的推荐书和成功案例,以证明LMS在公共场所的价值。 请随时在对话中分享您的支持和任何想法。
</要求反馈>
PyTorch大型模型支持
PyTorch大型模型支持(LMS)是 (WML CE)提供的PyTorch的功能,它允许成功训练深度学习模型,否则将耗尽GPU内存并因“内存不足”而中止错误。 LMS通过在不需要张量时临时将张量交换到主机内存来管理GPU内存的超额订购。
 深度学习模型的一个或多个元素可能导致GPU内存耗尽。
 这些包括:
 模型深度和复杂度
基本数据大小(例如,高分辨率图像)
传统上,解决此问题的方法是修改模型,直到模型适合GPU内存为止。 但是,这种方法会对准确性产生负面影响,尤其是在通过降低数据保真
                                    资源包含文件:实验报告word+源码及数据
需要实现的模型:1. 基于 Backward Propagation 算法的人工神经网络;2. 卷积神经网络。
在 MNIST 手写字符识别数据集(http://yann.lecun.com/exdb/mnist/)上对实现的两个模型进行实验测试,陈述其原理与结果。
Windows 10
Conda 4.10.3
Python 3.9
PyTorch 1.9.1
PyTorch-Lightning 1.4.9
DataSpell 2021.3 EAP
准备阶段,使用 PyTorch-Lightning 进行训练框架的搭建。
在{model_name}_main.py 入口脚本(例如 cnn_main.py)中设置 Global Seed 为 42,使用自定义的 MnistDataLoader 作为训练数据,使用 pl.Trainer()对模型进行训练,自定义是否使用 GPU、epoch 数等参数:
详细介绍参考:https://blog.csdn.net/newlw/article/details/125008249