栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

飞桨AI创造营2期-t3-数据处理

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

飞桨AI创造营2期-t3-数据处理

飞桨AI创造营2期-数据处理

(Datawhale34期组队学习)

文章目录

飞桨AI创造营2期-数据处理

1知识点2具体内容

2.1AI Studio Notebook命令2.2Numpy基础2.3Opencv2.4数据集读取与预处理 3参考

1知识点

AI Studio Notebook命令Numpy

创建数据属性切片索引生成随机数组通用函数Tensor Opencv

图像基础操作图像增强方式 数据集读取与预处理

官方数据集读取与预处理自定义数据集读取与预处理 2具体内容 2.1AI Studio Notebook命令

大数据框架在总体上分为存储引擎和计算分析引擎
AI Studio Notebook命令

    shell :在Shell命令前添加! (感叹号)Python代码:创建一个kernel,每个cell是天然断点,顺序可颠倒。前端通过建立Session控制kernelMagic:% 或 %%,分别代表行 Magic 命令和单元格 Magic 命令

    %lsmagic查看所有%%timeit运行时长%matplotlib inline%config InlineBackend.figure_format = ‘retina’%env 设置环境变量%run 运行python代码%%writefile magic可以把cell的内容保存到外部文件里%pycat则可把外部文件展示在Cell中

2.2Numpy基础

数值计算扩展库

存储和处理大型矩阵(矩阵matrix) ,支持大量维度数组和矩阵运算,针对数组运算提供数学函数库 nupmy官网链接

    创建
numpy.array(object,dtype=None,copy=True,order='K',subok=False,ndmin=0)
- object:接收 array_like。表示想要创建的数组。无默认。
- dtype:接收 data-type。表示数组所需的数据类型。如果未给定,则选择保存对象所需的最小类型。默认为 None。
- ndmin:接收 int。指定生成数组应该具有的最小维数。默认为 None。

    数组属性

    dtype,返回 data-type,描述数组中元素的类型itemsize,返回 int,表示数组的每个元素的大小(以字节为单位)ndim,返回 int,表示数组的维度shape,返回 tuple,表示数组的尺寸,对于 n 行 m 列的矩阵,形状为(n,m)size,返回 int,表示数组的元素总数,等于数组形状的乘积

    切片索引

    生成随机数组

    np.random.rand(2,3):小数数组,返回一个或一组服从“0~1”均匀分布的随机样本值。随机样本取值范围是[0,1),不包括1np.random.randint(1,100, 10):返回 [1,100)内10个随机整数np.random.choice(b, 5):从b中随机抽5个数据np.random.randint(1,100, (2,3)) :返回 [1,100)内2x3数组np.random.shuffle(random_d):随机排列,打乱顺序

    通用函数

     b.max(), b.min(), b.ptp(), b.sum(), b.mean()
     b.var(), b.std() , np.median(b) # 方差、标准差、中位数
     b.argmax(), b.argmin() # 最大值、最小值所对应的索引下标
     np.prod(c) # 累乘 120
     np.cumprod(c) # 累乘并给出中间结果 array([1,2,6,24,120])
     np.cumsum(c) # 累加并给出中间结果
     np.unique(b) # 返回不重复的元素值 array([1, 3, 5, 7, 8])
     np.all(b) # b所有元素都为非0值则返回True
     np.any(b) # b有任意元素为非0值则返回True
     np.zeros((3,4)),np.ones((3,4)) # 创建元素全0、1的数组
    
    
     np.dot(a,b) # 矩阵乘法运算的dot()函数
     np.bmat() # 矩阵拼接
     b.T() # 矩阵转置
     b.I() # 矩阵的逆
    
    
     缺失值: nan表示缺失值,如数组中含有nan ,则函数运算结果为nan。
     np.isnan(b) # isnan()测试是否nan值
    

    Tensor

Tensor实际上就是一个多维数组(multidimensional array),而Tensor的目的是能够创造更高维度的矩阵、向量。paddle的Tensor文档 2.3Opencv

    OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

    官网链接

    图像基础

    opencv零基础笔记

    图像增强方式

    opencv图像数据增强笔记paddle API

2.4数据集读取与预处理
    paddle官方数据
# 图像转tensor操作,也可以加一些数据增强的方式,例如旋转、模糊等等
# 数据增强的方式要加在Compose([  ])中
def get_transforms(mode='train'):
    if mode == 'train':
        data_transforms = transforms.Compose([
            transforms.ToTensor(),
            transforms.Normalize(mean=[0.4914, 0.4822, 0.4465], std=[0.2023, 0.1994, 0.2010])])
    else:
        data_transforms = transforms.Compose([
            transforms.ToTensor(),
            transforms.Normalize(mean=[0.4914, 0.4822, 0.4465], std=[0.2023, 0.1994, 0.2010])])
    return data_transforms

# 获取官方MNIST数据集
def get_dataset(name='MNIST', mode='train'):
    if name == 'MNIST':
        dataset = datasets.MNIST(mode=mode, transform=get_transforms(mode))

    return dataset

# 定义数据加载到模型形式
def get_dataloader(dataset, batch_size=128, mode='train'):
    dataloader = DataLoader(dataset, batch_size=batch_size, num_workers=2, shuffle=(mode == 'train'))
    return dataloader

#运行
batch_size = 2
train_dataset = get_dataset(mode='train')
train_dataloader = get_dataloader(train_dataset, batch_size, mode='train')
# val_dataset = get_dataset(mode='test')
# val_dataloader = get_dataloader(val_dataset, batch_size, mode='test')

#查看加载到模型的train数据
for data in enumerate(train_dataloader):
    image = data[0]
    label = data[1]
    print(image)
    print(label)
    break  # 执行一个batch_size大小看看结果
    自定义数据集读取与预处理

一是建立样本数据读取路径与样本标签之间的关系二是构造读取器与数据预处理。可以写个自定义数据读取器,它继承于PaddlePaddle的dataset类,在__getitem__方法中把自定义的预处理方法加载进去。

#以下代码用于建立样本数据读取路径与样本标签之间的关系
import os
import random

data_list = [] #用个列表保存每个样本的读取路径、标签

#由于属种名称本身是字符串,而输入模型的是数字。需要构造一个字典,把某个数字代表该属种名称。键是属种名称,值是整数。
label_list=[]
with open("/home/aistudio/data/species.txt") as f:
    for line in f:
        a,b = line.strip("n").split(" ")
        label_list.append([b, int(a)-1])
label_dic = dict(label_list)

#获取Butterfly20目录下的所有子目录名称,保存进一个列表之中
class_list = os.listdir("/home/aistudio/data/Butterfly20")
class_list.remove('.DS_Store') #删掉列表中名为.DS_Store的元素,因为.DS_Store并没有样本。

for each in class_list:
    for f in os.listdir("/home/aistudio/data/Butterfly20/"+each):
        data_list.append(["/home/aistudio/data/Butterfly20/"+each+'/'+f,label_dic[each]])

#按文件顺序读取,可能造成很多属种图片存在序列相关,用random.shuffle方法把样本顺序彻底打乱。
random.shuffle(data_list)

#打印前十个,可以看出data_list列表中的每个元素是[样本读取路径, 样本标签]。
print(data_list[0:10])

#打印样本数量,一共有1866个样本。
print("样本数量是:{}".format(len(data_list)))
#以下代码用于构造读取器与数据预处理
#首先需要导入相关的模块
import paddle
from paddle.vision.transforms import Compose, ColorJitter, Resize,Transpose, Normalize,BrightnessTransform,RandomVerticalFlip,RandomHorizontalFlip,RandomRotation
import cv2
import numpy as np
from PIL import Image
from paddle.io import Dataset

#自定义的数据预处理函数,输入原始图像,输出处理后的图像,可以借用paddle.vision.transforms的数据处理功能
def preprocess(img):
    transform = Compose([
        Resize(size=(224, 224)), #把数据长宽像素调成224*224
        #ColorJitter(0.4, 0.4, 0.4, 0.4),# 随机调整图像的亮度,对比度,饱和度和色调。
        #RandomHorizontalFlip(224),
        #RandomVerticalFlip(224),
        #BrightnessTransform(0.2),
        
        Normalize(mean=[127.5, 127.5, 127.5], std=[127.5, 127.5, 127.5], data_format='HWC'), #标准化
        Transpose(), #原始数据形状维度是HWC格式,经过Transpose,转换为CHW格式
        ])
    img = transform(img).astype("float32")
    return img

#自定义数据读取器
class Reader(Dataset):
    def __init__(self, data, is_val=False):
        super().__init__()
        #在初始化阶段,把数据集划分训练集和测试集。由于在读取前样本已经被打乱顺序,取20%的样本作为测试集,80%的样本作为训练集。
        self.samples = data[-int(len(data)*0.2):] if is_val else data[:-int(len(data)*0.2)]

    def __getitem__(self, idx):
        #处理图像
        img_path = self.samples[idx][0] #得到某样本的路径
        img = Image.open(img_path)
        if img.mode != 'RGB':
            img = img.convert('RGB')
        img = preprocess(img) #数据预处理--这里仅包括简单数据预处理,没有用到数据增强

        #处理标签
        label = self.samples[idx][1] #得到某样本的标签
        label = np.array([label], dtype="int64") #把标签数据类型转成int64
        return img, label

    def __len__(self):
        #返回每个Epoch中图片数量
        return len(self.samples)

#生成训练数据集实例
train_dataset = Reader(data_list, is_val=False)

#生成测试数据集实例
eval_dataset = Reader(data_list, is_val=True)

#打印一个训练样本
#print(train_dataset[1136][0])
print(train_dataset[1136][0].shape)
print(train_dataset[1136][1])
    加载数据集(返回原始数据)定义trans_func(),包括tokenize, token to id等操作,传入map()方法,将原始数据转为feature根据上步结果定义batchify方法和BatchSampler定义DataLoader,传入BatchSampler和batchify_fn()

文本处理

基于预训练模型的数据处理 tokenizer,batchify基于非预训练模型:Jiebatokenizer,vovab 3参考

https://aistudio.baidu.com/aistudio/projectdetail/3488812

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/743869.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号