An easy-to-use tool for training Pytorch deep learning models
Project description
DeepEpochs
Pytorch深度学习模型训练工具。
安装
pip install deepepochs
使用
数据要求
- 训练集、验证集和测试集是
torch.utils.data.Dataloader
对象 Dataloaer
所构造的每个mini-batch数据(collate_fn
返回值)是一个tuple
或list
,其中最后一个是标签- 如果训练中不需要标签,则需将最后一项置为
None
- 如果训练中不需要标签,则需将最后一项置为
指标计算
- 每个指标是一个函数
- 有两个参数,分别为模型预测和数据标签
- 返回值为当前mini-batch上的指标值
应用
from deepepochs import Trainer, CheckCallback, rename, EpochTask, LogCallback
import torch
from torch import nn
from torch.nn import functional as F
from torchvision.datasets import MNIST
from torchvision import transforms
from torch.utils.data import DataLoader, random_split
from torchmetrics import functional as MF
# datasets
data_dir = './datasets'
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))])
mnist_full = MNIST(data_dir, train=True, transform=transform, download=True)
train_ds, val_ds, _ = random_split(mnist_full, [5000, 5000, 50000])
test_ds = MNIST(data_dir, train=False, transform=transform, download=True)
# dataloaders
train_dl = DataLoader(train_ds, batch_size=32)
val_dl = DataLoader(val_ds, batch_size=32)
test_dl = DataLoader(test_ds, batch_size=32)
# pytorch model
channels, width, height = (1, 28, 28)
model = nn.Sequential(
nn.Flatten(),
nn.Linear(channels * width * height, 64),
nn.ReLU(),
nn.Dropout(0.1),
nn.Linear(64, 64),
nn.ReLU(),
nn.Dropout(0.1),
nn.Linear(64, 10)
)
def acc(preds, targets):
return MF.accuracy(preds, targets, task='multiclass', num_classes=10)
@rename('')
def multi_metrics(preds, targets):
return {
'p': MF.precision(preds, targets, task='multiclass', num_classes=10),
'r': MF.recall(preds, targets, task='multiclass', num_classes=10)
}
checker = CheckCallback('loss', on_stage='val', mode='min', patience=2)
opt = torch.optim.Adam(model.parameters(), lr=2e-4)
trainer = Trainer(model, F.cross_entropy, opt=opt, epochs=5, callbacks=checker, metrics=[acc])
progress = trainer.fit(train_dl, val_dl, metrics=[multi_metrics])
test_rst = trainer.test(test_dl)
示例
序号 | 功能说明 | 代码 |
---|---|---|
1 | 基本使用 | examples/1-basic.py |
2 | 训练器、fit方法、test方法的常用参数 | examples/2-basic-params.py |
3 | 模型性能评价指标的使用 | examples/3-metrics.py |
4 | Checkpoint和EarlyStop | examples/4-checkpoint-earlystop.py |
5 | 检测适当的学习率 | examples/5-lr-find.py |
6 | 利用Tensorboad记录训练过程 | examples/6-logger.py |
7 | 利用tensorboard记录与可视化超参数 | examples/7-log-hyperparameters.py |
8 | 学习率调度 | examples/8-lr-schedule.py |
9 | 使用多个优化器 | examples/9-multi-optimizers.py |
10 | 在训练、验证、测试中使用多个Dataloader | examples/10-multi-dataloaders.py |
11 | 利用图神经网络对节点进行分类 | examples/11-node-classification.py |
12 | 模型前向输出和梯度的可视化 | examples/12-weight-grad-visualize.py |
13 | 自定义Callback | examples/13-costomize-callback.py |
14 | 通过TrainerBase 定制train_step 和evaluate_step |
examples/14-customize-steps-1.py |
15 | 通过EpochTask 定制train_step 和eval_step 和test_step |
examples/15-customize-steps-2.py |
16 | 通过EpochTask 定制*step |
examples/16-costomize-steps-3.py |
17 | 内置Patch的使用 | examples/17-patchs.py |
18 | 自定义Patch | examples/18-customize-patch.py |
定制训练流程
- 方法1:
- 第1步:继承
deepepochs.Callback
类,定制满足需要的Callback
- 第2步:使用
deepepochs.Trainer
训练模型,将定制的Callback
对象作为Trainer
的callbacks
参数
- 第1步:继承
- 方法2:
- 第1步:继承
deepepochs.TrainerBase
类,定制满足需要的Trainer
,实现step
、train_step
、val_step
、test_step
或evaluate_step
方法- 这些方法有三个参数
batch_x
: 一个mini-batch的模型输入数据batch_y
: 一个mini-batch的标签**step_args
:可变参数字典,包含do_loss
、metrics
等参数
- 返回值为字典
- key:指标名称
- value:
deepepochs.PatchBase
子类对象,可用的Patch有ValuePatch
: 根据每个batch指标均值(提前计算好)和batch_size,累积计算Epoch指标均值TensorPatch
: 保存每个batch模型预测输出及标签,根据指定指标函数累积计算Epoch指标均值MeanPatch
: 保存每个batch指标均值,根据指定指标函数累积计算Epoch指标均值ConfusionPatch
:累积计算基于混淆矩阵的指标- 也可以继承
PatchBase
定义新的Patch(存在复杂指标运算的情况下)PatchBase.add
方法PatchBase.forward
方法
- 这些方法有三个参数
- 第2步:调用定制
Trainer
训练模型。
- 第1步:继承
- 方法3:
- 第1步:继承
deepepochs.EpochTask
类,在其中定义step
、train_step
、val_step
、test_step
或evaluate_step
方法- 它们的定义方式与
Trainer
中的*step
方法相同 step
方法优先级最高,即可用于训练也可用于验证和测试(定义了step
方法,其他方法就会失效)val_step
、test_step
优先级高于evaluate_step
方法EpochTask
中的*_step
方法优先级高于Trainer
中的*_step
方法
- 它们的定义方式与
- 第2步:使用新的
EpochTask
任务进行训练- 将
EpochTask
对象作为Trainer.fit
中train_tasks
和val_tasks
的参数值,或者Trainer.test
方法中tasks
的参数值
- 将
- 第1步:继承
数据流图
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
deepepochs-0.4.11.tar.gz
(26.8 kB
view details)
Built Distribution
File details
Details for the file deepepochs-0.4.11.tar.gz
.
File metadata
- Download URL: deepepochs-0.4.11.tar.gz
- Upload date:
- Size: 26.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.13
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 56c7343e5fcdbf1a88fedf8645ba4d3a2124886f1967e277e76e698831e366de |
|
MD5 | ce3eb69b081751965bf5b1f569745fd8 |
|
BLAKE2b-256 | 3313fab6e672e48e3f3998ab21c9809a03b2bab8b32cae8c3083f679f7a230d9 |
File details
Details for the file deepepochs-0.4.11-py3-none-any.whl
.
File metadata
- Download URL: deepepochs-0.4.11-py3-none-any.whl
- Upload date:
- Size: 28.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.13
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 26db38c20acacc05ce3bb7796c4655602f64baa9b24b1f7219e8576f8bf816c6 |
|
MD5 | a46922ab78563f65794da1f5d939cfb2 |
|
BLAKE2b-256 | 154e0566ed2ec55f18d22ff4c8d7c4c68ca1f7a1d0db7ed14668524f06e305f4 |