fast 存储_stata时间序列adf检验代码

fast 存储_stata时间序列adf检验代码介绍了Fastai框架下的数据准备以及数据增强的操作。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Fastai数据准备

简介

数据是深度学习的立足之本,本文主要介绍Fastai框架如何进行数据加载与数据预处理。

模块划分

在之前的Fastai简介文章我提到过,Fastai最核心的API是按照应用领域(任务类型)进行划分的,打开官方文档也会看到Fastai最核心的思路:在一个DataBunch(Fastai的数据加载器)上训练一个Model对象,是非常简单的,只需要将数据和模型绑定到一个Learner对象即可。

在Fastai的设计中,主要有四大应用领域,对应的四个模块名为collab(协同过滤问题)、tabular(表格或者结构化数据问题)、text(自然语言处理问题)以及vision(计算机视觉问题)。**本系列所有文章围绕都是图像数据进行处理,也就是说主要使用vision模块。**本系列所有文章围绕都是图像数据进行处理,也就是说主要使用vision模块。

而在vision模块中,主要有如下几个模块:data(数据集构建)、models(预定义模型结构,依赖torchvision)、learner(学习器,将模型和数据关联起来,定义了大量回调函数)、transform(数据预处理,包括常见数据增广手段)等。

数据集构建

为了契合Fastai的API设计,这里并没有像之前Pytorch系列和Keras系列那样重构数据集为三个文件夹(对应训练集、验证集和测试集),这是考虑到Fastai的自动训练集划分的API的介绍,事实上划分数据集文件夹也是可以的,只不过多几个DataBunch对象而已。

关于数据集读取的API都在fastai.vision.data模块下,该模块定义了一个类ImageDataBunch用于处理大量的Image对象,这里的Image对象也是由fastai.vision.data模块下定义的一种Image类,它包含一个图片的矩阵表示、路径、维度、尺寸等属性,也包含图像显示、旋转、缩放、变换等。此外,Fastai依旧定义了不少具体视觉任务的类如用于图像分割的ImageSegment、用于检测的ImageBBox、用于关键点定位的ImagePoints等。

在Fastai中数据集的处理都是基于DataBunch类的,ImageDataBunch是其子类,封装了很多具体的适合计算机视觉使用的方法。而在Fastai中数据的导入一般通过data_block API实现,不过,对于常见的CV数据集格式,ImageDataBunch已经做了封装,无需进行繁琐的API编写。这些函数用于从固定格式的文件中获取图像数据,返回的也是ImageDataBunch对象,具体如下。

Folder(文件夹)

ImageDataBunch.from_folder(
  path:PathOrStr,   # 数据集根目录
  train:PathOrStr='train',   # 训练集子目录
  valid:PathOrStr='valid',   # 验证集子目录
  test:Union[Path, str, NoneType]=None,   # 测试集子目录
  valid_pct=None,   # 验证集划分比例
  seed:int=None,   # 验证集随机划分种子
  classes:Collection[T_co]=None,  # 加载哪些类 
  **kwargs:Any)

从Imagenet风格的数据集内加载图像,文件存储必须是如下格式,其中trainvalidtest参数指定对应数据集的子文件夹名,如训练集为tra文件夹那么则需要指定train='tra'

path\
  train\
    class1\
    class2\
    ...
  valid\
    class1\
    class2\
    ...
  test\

当然,如果数据集是本文案例的Caltech101的格式(下面所示),那么只需要简单指定valid_pct作为划分训练集和验证集时验证集占整个数据集的比例即可,seed参数指定随机划分种子,便于复现结果。

path\
  class1\
  class2\
  class3\

在这里插入图片描述

执行下面的代码。

from fastai import vision

data = vision.ImageDataBunch.from_folder("../data/101_ObjectCategories/", valid_pct=0.2, size=224)
print(data)
train_ds = data.train_ds  # 取出训练集
valid_ds = data.valid_ds  # 取出测试集

结果如下,生成了训练集和验证集(包括数据列表和类别列表)。

ImageDataBunch;

Train: LabelList (6942 items)
x: ImageList
Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224)
y: CategoryList
accordion,accordion,accordion,accordion,accordion
Path: ..\data\101_ObjectCategories;

Valid: LabelList (1735 items)
x: ImageList
Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224)
y: CategoryList
dollar_bill,umbrella,Motorbikes,pigeon,nautilus
Path: ..\data\101_ObjectCategories;

Test: None

上面的代码在参数中加入了size参数,该参数表示将图像的宽度和高度调整为指定尺寸,并且指定df_tfms可以自定义预处理方法。而且,通过属性获取的操作得到了具体的训练集和验证集,这会得到一个LabelList对象,对其索引可以得到图像和标签,如img, label = train_ds[0],其中img就是一个Fastai的Image对象。

DataFrame(表格说明文件)

ImageDataBunch.from_folder(
  path:PathOrStr,  # 数据集根目录
  df:DataFrame,   # 包含文件路径和标签的DataFrame
  folder:PathOrStr=None,  # 相对于Path的数据存放的子目录
  label_delim:str=None,  # 标签分隔符
  valid_pct:float=0.2,   
  seed:int=None, 
  fn_col:IntsOrStrs=0,  # 文件名列的名称或者索引号
  label_col:IntsOrStrs=1,   # 标签列的名称或者索引号
  suffix:str='',  # 添加的文件名后缀
  **kwargs:Any)

通过DataFrame获取整个数据集信息,大多数参数同上一节(下文不再说明)。

其针对的数据格式一般如下

path\
  data\
  description.csv

CSV(表格说明文件)

ImageDataBunch.from_csv(
  path:PathOrStr, 
  folder:PathOrStr=None, 
  label_delim:str=None, 
  csv_labels:PathOrStr='labels.csv',   # 如果有单独的标签CSV文件可以这样指定
  valid_pct:float=0.2, 
  seed:int=None, 
  fn_col:int=0, label_col:int=1, 
  suffix:str='', 
  delimiter:str=None, 
  header:Union[int, str, NoneType]='infer', 
  **kwargs:Any)

直接从CSV文件中读取数据集,省去读取为DataFrame的步骤。

文件名

很多数据集存储方式是不同的,有些数据集的标签就存放在文件名中,下面定义的三个方法用于从文件名中提取出标签。

ImageDataBunch.from_name_re(
  path:PathOrStr,  # 文件所在路径
  fnames:FilePathList,  文件名列表
  pat:str,  # 匹配模式
  valid_pct:float=0.2,  # 同上 
  **kwargs)

从文件名中按照正则表达式提取标签。

ImageDataBunch.from_name_func(
  path:PathOrStr, 
  fnames:FilePathList, 
  label_func:Callable,  # 标签提取函数
  valid_pct:float=0.2, 
  seed:int=None, 
  **kwargs)

根据指定的标签提取函数(自行定义)来从文件名中提取标签。

ImageDataBunch.from_lists(
  path:PathOrStr, 
  fnames:FilePathList, 
  labels:StrList,  # 标签列表
  valid_pct:float=0.2, 
  seed:int=None, 
  item_cls:Callable=None, 
  **kwargs)

需要传入一个和fnames同等大小的列表,依次为每个文件指定标签。

数据增强

上一节介绍了构建Fastai中数据集导入部分最为核心的DataBunch的几种常见方法,它就是输入模型的数据了。但是,在输入模型数据之前我们往往会对图像数据进行各种变换,称为数据增强(Data Augmentation)。数据增强本质上其实就是一种正则化,不过发生在数据层面而已。

Transform类

Fastai定义了大量的图像变换函数,通过实例化这些函数对象可以直接对图像数据进行操作。但是这些基础的变换函数都是以_开头的函数如_brightness(x, change)表示改变图像的亮度函数,注意是个函数。但是实际进行数据增强的时候往往要增加一些随机性(如随机进行翻转),所以Fastai提供了一个对这些变换进行封装的类fastai.vision.image.Transform。该类提供共有的特性如变换函数优先级等,这些封装好的变换都在fastai.vision.transform模块下,是不以_开头的一系列对象(由Transform的子类实例化) ,注意是对象,同时,所有这类封装都相比于原函数多了一个参数p,表示以概率p进行变换,如果p是区间则从区间内随机选择作为概率。可以通过该对象的call方法对图像数据进行处理,如使用brightness(x, change)

图像变换

下面描述具体的图像变换手段,主要介绍的都是图像变换对象,变换函数只是少了概率参数p而已。

brightness(x, change:uniform)

对图像进行亮度调整,按照change的数值进行,其值为1表示图像为白色,为0表示黑色,为0.5表示无变化,可在0与1之间调整。

contrast(x, scale:log_uniform)

对图像进行对比度调整,sacle表示调整量,当其值为0会将图片转为灰度图,其值为1不调整对比度,大于1会增大对比度。

crop(x, size, row_pct:uniform=0.5, col_pct:uniform=0.5) 

对图像进行裁减,按照中心位置(row_pct, col_pct)把图像裁减一个大小为size的patch,这两个位置值以归一化格式表示。

crop_pad(x, size, padding_mode='reflection', row_pct:uniform=0.5, col_pct:uniform=0.5)

crop类似,不过当裁减图像大于原始图像,会自动进行填充,填充方法为’zeros’, ‘border’或者’reflection’。

dihedral(x, k:partial(uniform_int, 0, 7))

进行图像翻转并伴有一个k*90度的旋转。

dihedral_affine(k:partial(uniform_int, 0, 7))

效果同上,返回的类型不同,当目标是ImageBBox或者ImagePoints时使用。

flip_lr(x)

水平镜像翻转图片。

flip_affine()

同上面的以_affine为结尾的含义。

jitter(c, magnitude:uniform)

邻域像素替换,邻域范围由magnitude参数指定。

pad(x, padding:int, mode='reflection')

图像填充,填充模式三种:zeros(0填充)、border(边角填充)以及默认的reflection(反射填充)。

perspective_warp(c, magnitude:partial(uniform, size=8)=0, invert=False)

透视变换,magnitude是8元组参数,表示四个角归一化坐标的变换幅度。

Image.resize(self, size:Union[int,TensorImageSize])

引用自Torch的图像缩放,size为整数(正方形)或者(3,H,W)格式。

rotate(degrees:uniform)

图像旋转,指定角度即可。

rgb_randomize(x, channel:int=None, thresh:float=0.3)

随机化RGB的某一通道,可以设置最大阈值。

skew(c, direction:uniform_int, magnitude:uniform=0, invert=False)

图像扭曲,可以指定方向和幅度。

squish(scale:uniform=1.0, row_pct:uniform=0.5, col_pct:uniform=0.5)

图像拉伸,scale<1为横向拉伸,scale>1为纵向拉伸。

symmetric_warp(c, magnitude:partial(uniform, size=4)=0, invert=False)

指定的透视变换。

tilt(c, direction:uniform_int, magnitude:uniform=0, invert=False)

倾斜。

zoom(scale:uniform=1.0, row_pct:uniform=0.5, col_pct:uniform=0.5)

等比例缩放。

cutout(x, n_holes:uniform_int=1, length:uniform_int=40)

孔洞产生。

get_transforms()

该函数封装在fastai.vision.transform模块下,返回两个变换列表(每个列表包含一系列变换),用于训练集和验证集。

get_transforms(do_flip:bool=True, flip_vert:bool=False, max_rotate:float=10.0, max_zoom:float=1.1, max_lighting:float=0.2, max_warp:float=0.2, p_affine:float=0.75, p_lighting:float=0.75, xtra_tfms:Optional[Collection[Transform]]=None)

该函数可以很方便地返回大量需要的变换用于数据集的载入,如使用下述代码构建用于随机翻转变换的数据集。

from fastai.vision import transform, open_image, data
tfms = transform.get_transforms(do_flip=True)
data = data.ImageDataBunch.from_folder("../data/101_ObjectCategories/", valid_pct=0.2, size=224, ds_tfms=tfms)
train_ds, valid_ds = data.train_ds, data.valid_ds

补充说明

本文依据最新的官方文档讲解了Fastai中数据读入以及数据增强(文档)的相关知识,具体代码开源于我的Github,欢迎star或者fork。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/195952.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • NTP协议解析_ntp是安全协议吗

    NTP协议解析_ntp是安全协议吗NTP(NetworkTimeProtocol,网络时间协议)是由RFC1305定义的时间同步协议,用来在分布式时间服务器和客户端之间进行时间同步。NTP基于UDP报文进行传输,使用的UDP端口号为123。使用NTP的目的是对网络内所有具有时钟的设备进行时钟同步,使网络内所有设备的时钟保持一致,从而使设备能够提供基于统一时间的多种应用。对于运行NTP的本地系统,既可以接收来自

  • Not enough information to list image symbols. Not enough information to list load addresses in …「建议收藏」

    Not enough information to list image symbols. Not enough information to list load addresses in …「建议收藏」linking…..\Objects\BBQ_Wifi.axf:Error:L6218E:UndefinedsymbolClear_Led_Timer(referredfrommain.o)…\Objects\BBQ_Wifi.axf:Error:L6218E:UndefinedsymbolGet_Led_Timer(referredfrommain.o…

  • java正则表达 替换_java正则表达式替换

    java正则表达 替换_java正则表达式替换java正则表达式替换[@more@]//正则表达式替换–尾部为空格或者;Stringregex=”#w+((s)|(;)|()))”;Patternpattern=Pattern.compile(regex);Matchermatcher=pattern.matcher(sql);StringBuffersbf=newStringBuffer();while(matc…

  • set集合的特点

    set集合的特点set集合的特点A:存入集合的顺序和取出集合的顺序不一致B:没有索引C:存入集合的元素没有重复set接口的实现类常用的有HashSet和TreeSet类。语法格式如下:Set<String>set1=newHashSet<String>();Set<String>set2=newTreeSe…

  • 真实机下 ubuntu 18.04 安装GPU +CUDA+cuDNN 以及其版本选择(亲测非常实用)

    真实机下 ubuntu 18.04 安装GPU +CUDA+cuDNN 以及其版本选择(亲测非常实用)ubuntu18.04安装GPU+CUDA+cuDNN:目前,大多情况下,能搜到的基本上都ubuntu14.04.或者是ubuntu16.04的操作系统安装以及GPU环境搭建过程,博主就目前自身实验室环境进行分析,总结一下安装过程。1.实验室硬件配置(就需要而言):gpu:GeForcetitanxp12G显存内存:6…

  • Python2和Python3的区别,以及为什么选Python3的原因

    Python2和Python3的区别,以及为什么选Python3的原因我的机器学习教程「美团」算法工程师带你入门机器学习已经开始更新了,欢迎大家订阅~任何关于算法、编程、AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主在线答疑~此外,公众号内还有更多AI、算法、编程和大数据知识分享,以及免费的SSR节点和学习资料。其他平台(知乎/B站)也是同名「图灵的猫」,不要迷路哦~学…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号