Pytorch(三)

一、经典网络架构图像分类模型

数据预处理部分:

  • 数据增强
  • 数据预处理
  • DataLoader模块直接读取batch数据

网络模块设置:

  • 加载预训练模型,torchvision中有很多经典网络架构,可以直接调用
  • 注意别人训练好的任务跟咱们的并不完全一样,需要把最后的head层改一改,一般也就是最后的全连接层,改成自己的任务
  • 续联时可以全部重头训练,也可以只训练最后咱们任务的层,因为前几层都是做特征提取的,本质任务目标是一致的

网络模型保存与测试:

  • 模型保存的时候可以带有选择性,例如在验证集中如果当前效果好则保存
  • 读取模型进行实际测试

二、迁移学习

利用别人训练好的模型来训练自己的模型

注:两种物体尽可能相似

迁移学习网站: Start Locally | PyTorch

三、花图像分类案例

未完结

python 复制代码
#数据读取与预处理操作
data_dir = './a/'
# 训练集
train_dir = data_dir + '/train'
#验证集
valid_ir = data_dir + '/valid'

#制作数据源
data_transfroms = {
    'train':transforms.Compose([transforms.RandomRotation(45), #随机旋转(-45~45)
    transforms.CenterCrop(224), #从中心开始裁剪
    transforms.RandomHorizontalFlip(p = 0.5), #随机水平翻转
    transforms.RandomVerticalFlip(p = 0.5), #随机垂直翻转
    transforms.ColorJitter(brightness=0.2,contrast=0.1,saturation=0.1,hue = 0.1),
    transforms.RandomGrayscale(p = 0.025), #概率转换成灰度率,3通道就是R=G=B
    transforms.ToTensor(),
    transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])
    ]),
    'valid':transforms.Compose([transforms.Resize(256),
        transforms.CenterCrop(224),
        transforms.ToTensor(),
        transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])
    ]),
}

#batch数据制作
batch_size = 8
image_datasets = {x: datasets.ImageFolder(os.path.join(data_dir,x),data_transfroms[x]) for x in ['train','valid']}
dataloaders = {x: torch.utils.data.DataLoader(image_datasets[x],batch_size = batch_size,shuffle = True) for x in ['train','valid']}
dataset_sizes = {x: len(image_datasets[x]) for x in ['train','valid']}
class_names = image_datasets['train'].classes


#读取标签对应的实际名字
with open('cat_to_name.json','r') as f:
    cat_to_name = json.load(f)

#加载model中提供的模型,并且直接用训练好的权重当做初始化参数
model_name = 'resnet'
#是否用人家训练好的特征来做
feature_extract = True

#是否用GPU来训练
train_on_gpu = torch.cuda.is_available()

if not train_on_gpu:
    print('cuda is not available. Training on CPU')
else:
    print('cuda is available. Training on GPU')

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

def set_parameter_requires_grad(model,feature_extracting):
    if feature_extracting:
        for param in model.parameter():
            param.requires_grad = False

model_ft = models.resnet152()
相关推荐
名字不好奇2 分钟前
RAG进阶:下一代RAG怎么玩?
数据库·人工智能
zhoutongsheng3 分钟前
Chromebook适合用什么HTML函数工具_轻量化方案汇总【汇总】
jvm·数据库·python
夜影风7 分钟前
Claude Code是什么,为什么它能力强大而国产替代不及预期
人工智能·claude code
万事大吉CC8 分钟前
【4】深入剖析 Django 之 MTV:ORM 系统核心原理
数据库·python·oracle·django·sqlite
移动云开发者联盟9 分钟前
行业大咖已就位!邀您共赴移动云大会发布路演现场
人工智能
薛定e的猫咪13 分钟前
(AAMAS 2023)基于广义策略改进优先级的高效多目标学习 GPI - LS/PD
人工智能·学习·机器学习
Luhui Dev15 分钟前
几何题目自动配图技术详解:从文本到图形的智能化方案
人工智能·数学·luhuidev
电子科技圈15 分钟前
四大“门派”围攻边缘及端侧AI SoC市场“光明顶”
人工智能·嵌入式硬件·mcu·物联网·网络安全·音视频·语音识别
夜影风17 分钟前
OpenClaw:从“会说话“到“会干活“的AI革命
人工智能
themingyi17 分钟前
凸弧/凹弧构造
人工智能