PaddleClas模型训练/评估:数据准备

本文档介绍ImageNet1k和flowers102数据准备过程。

数据集训练集大小测试集大小类别数备注
flowers1021k6k102 
ImageNet1k1.2M50k1000
  • 数据格式 按照如下结构组织数据,其中train_list.txtval_list.txt的格式形如:
# 每一行采用"空格"分隔图像路径与标注

# 下面是train_list.txt中的格式样例
train/n01440764/n01440764_10026.JPEG 0
...

# 下面是val_list.txt中的格式样例
val/ILSVRC2012_val_00000001.JPEG 65
...

Python

########################################################################################################################
# Linux/OS X 系统下声明这是一个 Python 可执行程序; Windows 系统会忽略这个注释.
# !/usr/bin/env python
# 指定 Python 解释器按照 UTF-8 编码读取源代码, 否则源代码中的中文输出时可能会乱码.
# -*- coding: utf-8 -*-


########################################################################################################################
# 加入“绝对引入”新特性:
# 这样就可用import string引入系统标准string.py, 而用from pkg import string来引入当前目录下的string.py.
from __future__ import absolute_import, division, print_function, unicode_literals

########################################################################################################################
# 加载相关类库
import os
import sys
import scipy.io
import numpy as np

########################################################################################################################
# .mat文件数据格式
# imagelabel.mat
# jpg_name   1     2     3 ...
# label      32    12    66 ...
#
# setid.mat
# jpg_name(10 records in a class)  24 6 100 65 32 ...
# label                            4 ...


########################################################################################################################
# 自定义生成函数
def generate(file_name, dict_name):
    image_path = 'jpg'  # jpg 文件夹名称
    imagelabels_path = './imagelabels.mat'
    imagelabels_data = scipy.io.loadmat(imagelabels_path)
    labels = np.array(imagelabels_data['labels'][0])
    setid_path = './setid.mat'
    setid_data = scipy.io.loadmat(setid_path)
    # 设置字典
    lv_dict = {'train': np.array(setid_data['trnid'][0]),
               'valid': np.array(setid_data['valid'][0]),
               'test': np.array(setid_data['tstid'][0])}
    # 写入文件
    with open("%s.txt" % file_name, "w") as file:
        # 遍历
        for lv_id in lv_dict[dict_name]:
            message = str(image_path) + "/image_" + str(lv_id).zfill(5) + ".jpg " + str(labels[lv_id - 1] - 1)
            # print(message)
            file.write(message + '\n')

    # 提示信息
    print(f"{file_name}.txt generate complete!")


########################################################################################################################
# 自调用: 每个模块都有一个__name__属性, 当其值是'__main__'时, 表明该模块自身在运行, 否则是被引入.
if __name__ == '__main__':
    # 训练集
    generate('train_list', 'train')
    # 验证集
    generate('val_list', 'valid')
    # 测试集
    generate('test_list', 'test')

 

 

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然可以,以下是一个简单的PaddleClas模型训练代码示例: ```python import paddle import paddle.nn as nn from paddle.vision.models import resnet50 from paddle.optimizer.lr import CosineAnnealingDecay from paddle.vision.transforms import Compose, Resize, RandomHorizontalFlip, Normalize # 定义数据增强 transform_train = Compose([ Resize((224, 224)), RandomHorizontalFlip(), Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ]) # 加载训练数据集和测试数据集 train_dataset = paddle.vision.datasets.ImageNet(mode='train', transform=transform_train) test_dataset = paddle.vision.datasets.ImageNet(mode='test', transform=transform_train) # 定义模型 model = resnet50(pretrained=True, num_classes=1000) # 定义优化器和学习率衰减策略 optimizer = paddle.optimizer.Adam(learning_rate=0.001, parameters=model.parameters()) lr_scheduler = CosineAnnealingDecay(learning_rate=0.001, T_max=10) # 定义损失函数 criterion = nn.CrossEntropyLoss() # 开始训练 for epoch in range(10): model.train() for i, (inputs, labels) in enumerate(train_dataset): outputs = model(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() optimizer.clear_grad() lr_scheduler.step() if i % 100 == 0: print('epoch: {}, step: {}, loss: {}'.format(epoch, i, loss.numpy())) # 在测试集上测试准确率 model.eval() accs = [] for inputs, labels in test_dataset: outputs = model(inputs) preds = paddle.argmax(outputs) acc = paddle.metric.accuracy(preds, labels) accs.append(acc.numpy()) print('epoch: {}, test accuracy: {}'.format(epoch, sum(accs) / len(accs))) ``` 请注意,这只是一个简单的示例代码,实际训练中还需要进行一些调试和优化,如设置多GPU训练、增加数据增强策略、使用更复杂的模型等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值