FASTAI-fastai 学习笔记——lesson1[通俗易懂]

FASTAI-fastai 学习笔记——lesson1[通俗易懂]fastai学习笔记——lesson10-重要的参考网站课程一详细笔记(https://github.com/hiromis/notes/blob/master/Lesson1.md)课程一视频(https://www.bilibili.com/video/av41718196/?p=1)课程一源码(https://github.com/fastai/course-v3/blob…

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

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

fastai 学习笔记——lesson1

0-重要的参考网站

课程一详细笔记(https://github.com/hiromis/notes/blob/master/Lesson1.md

课程一视频(https://www.bilibili.com/video/av41718196/?p=1

课程一源码(https://github.com/fastai/course-v3/blob/master/nbs/dl1/lesson1-pets.ipynb

注:fastai的安装不再赘述,网上已经介绍的非常详细

课程一中用到的数据集和模型我上传了,方便大家使用。

https://download.csdn.net/download/weixin_38538305/11474915

1-详细内容

a、导入需要的包

from fastai import *
from fastai.vision import *
from fastai.datasets import *

b、下载数据集

path = untar_data(URLs.MNIST_SAMPLE)
#PosixPath('/home/stark/.fastai/data/mnist_sample')
path = untar_data(URLs.PETS)
#PosixPath('/home/stark/.fastai/data/oxford-iiit-pet')

#由于网速问题,可以用其他方法下载,只要将下载后的数据集放到对应的位置即可
#注:.fastai为隐藏文件夹 查看方法为 ctrl+H

'''
$ mkdir -p /home/stark/.fastai/data
$ cd /home/stark/.fastai/data
$ wget -c https://s3.amazonaws.com/fast-ai-imageclas/oxford-iiit-pet.tgz
$ tar -zxvf oxford-iiit-pet.tgz
'''

c、导入数据

1)fastai导入的函数包含在ImageDataBunch包中,并且导入数据的方式十分丰富

# 1- 从指定路径中导入数据集,并且使用正则表达式取得标签(路径中包含标签)
data = ImageDataBunch.from_name_re(path:PathOrStr, fnames:FilePathList, pat:str, valid_pct:float=0.2, **kwargs)
# 2- 从指定路径中导入数据集,labels为一个回调函数
data = ImageDataBunch.from_name_func(path:PathOrStr, fnames:FilePathList, 
                 label_func:Callable, valid_pct:float=0.2, seed:int=None, **kwargs)
# 3- 从指定路径读取数据集,labels为一个list
ImageDataBunch.from_list(path:PathOrStr, fnames:FilePathList, labels:StrList, 
              valid_pct:float=0.2, seed:int=None, item_cls:Callable=None, **kwargs)
# 4- 以csv中的数据地址读取数据
data = ImageDataBunch.from_csv(path, ds_tfms = tfms, size = 28)
# 5- 以文件夹的名字作为标签名
data = ImageDataBunch.from_folder(path, ds_tfms = tfms, size = 26)  #以文件夹为label名

2)详细例子如下

读取放置结构如下的数据

FASTAI-fastai 学习笔记——lesson1[通俗易懂]

2.1)from_name_re方法

# 1- from_name_re
path = '/home/stark/.fastai/data/oxford-iiit-pet/'
path_anno = '/home/stark/.fastai/data/oxford-iiit-pet/annotations'
path_img = '/home/stark/.fastai/data/oxford-iiit-pet/images'
fnames = get_image_files(path_img)    #获取path_img路径下的所有图片路径
print(fnames[:5])

pat = r'/([^/]+)_\d+.jpg$'         #正则化表达式
data = ImageDataBunch.from_name_re(path_img, fnames, pat, ds_tfms=get_transforms(), size=224)                    #读取数据集
data.normalize(imagenet_stats)  #标准化数据

print(data.classes)
print(len(data.classes))
print(data.c)

输出结果为

FASTAI-fastai 学习笔记——lesson1[通俗易懂]

可以看出这种方法适合所有训练数据都在train一个文件夹中并且标签信息在文件的名字中。

2.2)from_name_func

以读取MNIST_SAMPLE数据集为例

stark@Mark2:~/.fastai/data/mnist_sample$ tree -L 2
.
├── labels.csv
├── train
│   ├── 3
│   └── 7
└── valid
    ├── 3
    └── 7
path = untar_data(URLs.MNIST_SAMPLE); #/home/stark/.fastai/data/mnist_sample
fn_paths = [path/name for name in df['name']]; #/home/stark/.fastai/data/mnist_sample/train/3/7463.png

tfms = get_transforms(do_flip = False)  #transforms函数跟读取数据无关,是对数据的预处理

data = ImageDataBunch.from_name_func(path, fn_paths, ds_tfms = tfms, size = 24,
                                     label_func= lambda x:'3' if '/3/' in str(x) else '7')
data.classes
#输出为:
#['3', '7']

#label_func也可以定义为一个回调函数

2.3)from_list

创建一个list作为labels

path = untar_data(URLs.MNIST_SAMPLE); #/home/stark/.fastai/data/mnist_sample
fn_paths = [path/name for name in df['name']]; #/home/stark/.fastai/data/mnist_sample/train/3/7463.png

labels = [('3' if '/3/' in str(x) else '7') for x in fn_paths]
data = ImageDataBunch.from_lists(path,fn_paths,labels=labels,ds_tfms = tfms,size = 24)
print(data.classes)

#输出
['3', '7']

2.4)from_csv

从csv文件中读取所有数据的路径

csv的内容可以用如下代码查看

path = untar_data(URLs.MNIST_SAMPLE); #/home/stark/.fastai/data/mnist_sample
df = pd.read_csv(path/'labels.csv')
df.head()

结果为

FASTAI-fastai 学习笔记——lesson1[通俗易懂]

#这种调用方法时,path路径下一定要有名为 labels.csv的csv文件
data = ImageDataBunch.from_csv(path, ds_tfms = tfms, size = 28)

2.5)from_folder

这是我最喜欢的一种读取方式,直接以文件夹来对数据进行label

path = untar_data(URLs.MNIST_SAMPLE)
#/home/stark/.fastai/data/mnist_sample
data = ImageDataBunch.from_folder(path, ds_tfms = tfms, size = 26)  

综上,fastai提供的导入数据的方式是非常丰富的,个人觉得from_folder和from_list是最实用的。

d、查看数据

导入数据后还需要查看数据是否导入正确,查看数据大概有一下几种

#查看某一个数据
img, label = data.valid_ds[-1]
img.show(title=str(label))

FASTAI-fastai 学习笔记——lesson1[通俗易懂]

#随机查看多个
data.show_batch(rows = 3, figsize = (5,5))

FASTAI-fastai 学习笔记——lesson1[通俗易懂]

#查看标签
data.classes
#查看类别数
data.c

e、载入模型

# 载入模型 model.resnet34
learn = create_cnn(data, models.resnet34, metrics=error_rate)
# 训练模型
learn.fit_one_cycle(4)

FASTAI-fastai 学习笔记——lesson1[通俗易懂]

f、保存和载入模型

learn.save('/home/stark/Documents/JupyterNotebookFiles/fastai/stage-1')
learn.load('/home/stark/Documents/JupyterNotebookFiles/fastai/stage-1')

g、模型的性能查看

# Interpretation
interp = ClassificationInterpretation.from_learner(learn)
# 画出loss最大的几张图
interp.plot_top_losses(9, figsize=(15,15))
# 画出混淆矩阵
interp.plot_confusion_matrix(figsize = (12,12),dpi = 60)
# 被分错的类别和次数
interp.most_confused(min_val=2)

FASTAI-fastai 学习笔记——lesson1[通俗易懂]

 

FASTAI-fastai 学习笔记——lesson1[通俗易懂]

FASTAI-fastai 学习笔记——lesson1[通俗易懂]

h、其他

#默认的训练为迁移学习,若想从新训练一个模型需要解冻权重参数
learn = create_cnn(data, models.resnet18, metrics = accuracy)
learn.unfreeze()
learn.fit_one_cycle(2, max_lr=slice(1e-6,1e-4))

2-总结

       尽管只是第一课,但是内容还是很多的。要老命了。

       模型的调用什么的还没讲到,不着急不着急~

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

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

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

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

(0)
blank

相关推荐

  • Random的nextInt()用法「建议收藏」

    Random的nextInt()用法「建议收藏」Random的nextInt()用法一、先看这样一个有趣的题目:1、设计一个密码的自动生成器:密码由大写字母/小写字母/数字组成,生成六位随机密码。2、分别以1、2、3作为种子数创建Random对象,生成六位随机密码进行测试。问题答案核心代码如下:importjava.util.Random;importjava.util.Scanner;publicclassRandomT…

  • 荣耀路由2 虚拟服务器,2019年性价比之王旗舰路由器—荣耀路由PRO2评测「建议收藏」

    大家好我是搞机大表姐,今天大表姐给大家带来的是和荣耀V20一起发布的全新旗舰路由器—荣耀路由PRO2,时隔三年终于迎来了荣耀路由器PRO的升级版,相比上一代荣耀路由器PRO2带来了“六”大技术的升级,更是支持30天用不爽就退,且明哥还在发布会发下战书“600元内路由器任意挑战”的狠话让这次发布的路由PRO2带来了更足的底气,那么具体的实际表现如何呢,请看下面大表姐为大家带来的评测。按照国际惯…

  • 计算机网络基础知识整理大全_计算机基础知识题库

    计算机网络基础知识整理大全_计算机基础知识题库计算机网络基础知识一.因特网概述1.网络,互联网和因特网2.因特网发展的三个阶段3.因特网的标准化工作4.因特网的组成二.三种交换方式1.电路交换(CircuitSwitching)2.分组交换(PacketSwitching)3.报文交换(MessageSwitching)4.电路交换,报文交换,分组交换三者区别三.计算机网络的定义和分类1.计算机网络的定义2.计算机网络的分类一.因特网概述1.网络,互联网和因特网网络:由若干个结点和连接这些结点的链路(有限链路和无

  • python语法:如何通过value找key[通俗易懂]

    python语法:如何通过value找key[通俗易懂]python语法:如何通过value找key

  • 校园网网络规划与设计方案_计算机网络校园网设计总结

    校园网网络规划与设计方案_计算机网络校园网设计总结以前自己做的网络课程设计,用了思科软件,具体的文件包和word见另外的文章无锡科技职业学院校园网规划方案1需求分析1.1校园网总体概述无锡科技职业学院位于无锡市新吴区新锡路8号,其学习内部划分多个楼层。共有三个局域网站组成一个大型的校园网,分别为宿舍区域,教学区域,以及实训区域。每个部门又有众多人数,总体加起来也有500人。这三个区域又分别由三台路由器组合而成,形成了一个校园网站.1.2校园网络基本要求网络自身的需求受多方面因素影响:①网络的课伸缩性②现有网络所支持的业务③网络

  • 重定向是get还是post_请求转发与重定向的异同

    重定向是get还是post_请求转发与重定向的异同一、调用方式 我们知道,在servlet中调用转发、重定向的语句如下:request.getRequestDispatcher(“new.jsp”).forward(request,response);//转发到new.jspresponse.sendRedirect(“new.

发表回复

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

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