- 方便新手分类的一个简单框架
- Pytorch快速分类微型框架
- 介绍
- 框架介绍
- 环境
- 需要安装的第三方包
- 使用说明
- (可选)在自己的环境上安装此包
- 例子1:用于LeNet5图像分类
- 例子2:珠宝分类
链接:Gitee码云
介绍基于Pytorch开发的中文快速分类框架,易于修改。
框架用途: 图像分类、模型训练
框架介绍本项目基于 PytorchModelTools 项目二次抽象重构。
- 之前的代码太过于糟糕(可移植性差),虽然能用,但是可移植性差,代码耦合高。
理论上什么环境都能使用,因为我的代码并没有用到什么太复杂的操作。
Pytorch 1.8.1 cuda 11.1 Python 3.6需要安装的第三方包
pip install xlwt tqdm matplotlib numpy pandas使用说明
框架功能已经和原框架一致,可通过demo/lenet5_cifar10.py和demo/resnet_gemstones.py快速了解。
(可选)在自己的环境上安装此包python setup.py install例子1:用于LeNet5图像分类
例子来源于demo/lenet5_cifar10.py,可下载后直接跑通
import torch.nn as nn
from torchvision.datasets import CIFAR10
import torch.optim as optim
from fcf import *
import torchvision.transforms as transforms
from torch.nn import functional as F
from torch.utils.data import DataLoader
frame = baseframe().init_logging().set_seed()
# 环境构建
model = LeNet5()
optimizer = optim.SGD(params=model.parameters(),lr=0.001,momentum=0.9)
scheduler = optim.lr_scheduler.ExponentialLR(optimizer, gamma=0.99)
loss_fc = nn.CrossEntropyLoss()
# 构建模型进行训练
frame.build(model, is_cuda=False, device='cuda:0') # 如果is_cuda是True,那么device设置的才有意义。
frame.config(
epochs=1000, # 循环的epoch
optimizer=optimizer, # 优化器
scheduler=scheduler, # 学习率衰减
loss_fc=loss_fc, # 损失函数
train_dataloader=trainloader, # 数据集加载
test_dataloader=testloader,
is_softmax=False, # softmax层,默认不需要, 在框架中是特殊用途,自己需要softmax自己加,记得加了softmax不能用交叉熵损失。
is_half=False, # 开启半精度训练
is_two_category=False, # 是否是二分类,如果是,则会有二分类指标。例如:Recall、特异性、ROC等。
)
frame.train(is_checkpoint=False) # 是否要保持模型
例子2:珠宝分类
例子来源于:demo/resnet_gemstones.py
import logging
import torch.nn as nn
from torchvision.models import resnet34
import torch
import warnings
import torch.optim as optim
warnings.filterwarnings("ignore")
from dataset.gemstones_dataset import train_dataloader, test_dataloader
from fcf import *
# 环境准备
if __name__ == '__main__':
# 模型构建
frame = baseframe().init_logging().set_seed()
# 环境构建
model = resnet34(pretrained=True)
model.fc = nn.Sequential(
nn.Dropout(),
nn.Linear(512, 87, bias=False),
)
optimizer = optim.RMSprop(model.parameters(), lr=1e-4)
scheduler = optim.lr_scheduler.ExponentialLR(optimizer, gamma=0.9)
loss_fc = nn.CrossEntropyLoss()
# 构建模型进行训练
frame.build(model, is_cuda=False, device='cuda:0') # 如果is_cuda是True,那么device设置的才有意义。
frame.config(
epochs=1000, # 循环的epoch
optimizer=optimizer, # 优化器
scheduler=scheduler, # 学习率衰减
loss_fc=loss_fc, # 损失函数
train_dataloader=train_dataloader, # 数据集加载
test_dataloader=test_dataloader,
is_softmax=False, # softmax层,默认不需要, 在框架中是特殊用途,自己需要softmax自己加,记得加了softmax不能用交叉熵损失。
is_half=False, # 开启半精度训练
is_two_category=False, # 是否是二分类,如果是,则会有二分类指标。例如:Recall、特异性、ROC等。
)
frame.train(is_checkpoint=False) # 是否要保持模型



