专业建设金融行业网站的公司,网站建设的实验原理,wordpress模板 科技,上海网站建设方案策划如果遇到了这样一个问题#xff0c;当一次训练模型花了好几天#xff0c;结果突然在验证或测试的时候崩掉了#xff0c;这个时候其实是很奔溃的#xff0c;主要还是由于没有提前知道哪些时候会出现什么问题#xff0c;本节会引入Lightning的Debug方案 1.fast_dev_run参数 … 如果遇到了这样一个问题当一次训练模型花了好几天结果突然在验证或测试的时候崩掉了这个时候其实是很奔溃的主要还是由于没有提前知道哪些时候会出现什么问题本节会引入Lightning的Debug方案 1.fast_dev_run参数
Trainer中的fast_dev_run参数通过你的训练器运行5批训练、验证、测试和预测数据看看是否有任何错误如下
Trainer(fast_dev_runTrue)如果fast_dev_run设置为7则表示训练7个batch每次
⚠️注意这个参数将禁用tuner、checkpoint callbacks, early stopping callbacks, loggers 和 logger callbacks(如 LearningRateMonitor和DeviceStatsMonitor)。
2.减少epoch长度
有时我们只需要使用训练、val、测试或预测数据的一小部分(或一组批次)来看看是否有错误。例如可以使用20%的训练集和1%的验证集。
在像Imagenet这样的大型数据集上这可以帮助我们更快地调试或测试一些东西而不是等待一个完整的epoch。
# 只使用10%的训练数据和1%的验证数据
trainer Trainer(limit_train_batches0.1, limit_val_batches0.01)# 使用10批次训练和5批次验证
trainer Trainer(limit_train_batches10, limit_val_batches5)3.运行一次完整性验证
Lightning在训练开始时有2个验证的步骤。这避免了在验证循环中陷入冗长的训练循环。
trainer Trainer(num_sanity_val_steps2)4.打印模型相关参数
每当调用.fit()函数时训练器将打印LightningModule的权重摘要例如
trainer.fit(...)则出现 | Name | Type | Params
----------------------------------
0 | net | Sequential | 132 K
1 | net.0 | Linear | 131 K
2 | net.1 | BatchNorm1d | 1.0 K需要将子模块添加到摘要中添加一个ModelSummary如下操作
# 方法1.引入回调函数
from lightning.pytorch.callbacks import ModelSummary
trainer Trainer(callbacks[ModelSummary(max_depth-1)]) # 回调函数ModelSummary
trainer.fit()
# 注如果不打印则可以运行 Trainer(enable_model_summaryFalse)# 当然也可以下面这样子直接打印
# 方法2.不调用fit
model LitModel()
summary ModelSummary(model, max_depth-1)
print(summary)4.所有中间层的输入输出
另一个调试工具是通过在LightningModule中设置example_input_array属性来显示所有层的中间输入和输出大小。
class LitModel(LightningModule):def __init__(self, *args, **kwargs):self.example_input_array torch.Tensor(32, 1, 28, 28)当执行.fit()时会打印如下 | Name | Type | Params | In sizes | Out sizes
--------------------------------------------------------------
0 | net | Sequential | 132 K | [10, 256] | [10, 512]
1 | net.0 | Linear | 131 K | [10, 256] | [10, 512]
2 | net.1 | BatchNorm1d | 1.0 K | [10, 512] | [10, 512]