FASTAI,fast如何安装
课程页面
fast . aireleasnes新的学习课程,四个图书馆和600页的书
3359 www.fast.ai/2020/08/21/fastai2-发布会/
Fastai应用程序-快速入门
start.html docs.fast.ai/quick 3359号
教学课程页面
docs.fast.ai/tutorial.vision 3359号
程序页面
3359 colab . research . Google . com/github/fastai/fastai/blob/master/nbs/23 _ tutorial . vision . ipynb
可以点击复制到云端,复制到自己的Google Drive。
1 cyclepolicylearn . lr _ find(learn . recorder . plot)learn . fit)2,5e-3 ) learn.fit_one_cycle ) 2,
法斯泰街3359号。cycle.html fast.ai/callbacks.one
你如何找到一个好的学习率
sgugger.github.io/how-do-you-find-a-good-learning-rate.html 3359号
了解法士泰的固定一周法
3359 iconof.com/1周期-学习率-政策/
crsarenotcomputationally expensiveandliminatenethenedtofthebestlearningratevalue-optimallearningratewillfalsome where Baba值
这种学习率策略的本质来自于这样的观察,即
cyclicalleanngratesareeffectively,因为它们可以成功地协商鞍点,这通常具有小的坡度(平坦)和当learning rateissmal . thebestytoovercome suchobstaclesistospeedup和tomovefastuntilacured surface is
具体地说,在超收敛中,学习率从一个低值开始
挑选路径的组成部分
皇家python.com/python-path图书馆3359号
导入路径库
pathlib。Path.cwd(
POSIX path()/home/Gahjelle/real python/))
小路
POSIX路径(/home/gahjelle/real python/test。MD))
路径.名称
测试。MD
path.stem
“测试”
path .后缀。MD
path.parent
POSIX path()/home/Gahjelle/real python))
path.parent.parent
POSIXpath ()/home/Gahjelle))
路径.锚点
/
作者:有糖好吗?
链接:https://www.zhihu.com/question/310138804/answer/581039350
来源:知乎
版权归作者所有。商业转载请联系作者授权,非商业转载请注明出处。
Unfreeze使用的是fastai课程中的预训练模型,模型的卷积层的权重已经提前在ImageNet上训练好了。使用时,只需在预训练模型的最后一个卷积层后添加一个自定义的全连接层即可。默认情况下,卷积层是冻结的,即在训练阶段的反向传播过程中不会更新卷积层的权重,而只会更新全连接层的权重。经过几个epoch的训练,全连接层的权值已经训练的差不多了,但是精度还没有达到你的要求。这时候可以调用unfreeze然后训练,这样在反向传播的时候会更新卷积层的权重(一般卷积层的权重不会更新很大,只会做一点微调,前面卷积层的调整会小一些。所以用差分学习率的思想)precompute=True时,它会提前计算预训练模型最后一个卷积层的每个训练样本(不包括增强样本)的激活度,并缓存。然后在训练阶段前向传播时,将precompute的激活直接作为后面全连接层(FC层)的输入,省去了前面卷积层前向传播的计算,减少了训练时间(这个优点在历元较大时可以显著提高训练速度)。当precompute=False时,不会预先计算训练样本的激活,每个历元需要在卷积层的正向重新传播训练样本增强样本(假设进行了增强操作),然后进行反向传播以更新相应的权重。
总结:当precompute=True时:
增强样本不会参与训练;不管你的模型是融化还是冻结都不会更新卷积层的权重,因为激活已经提前计算好了,如果你想要更新卷积层权重,必须把预计算设置为错误。当预计算=假时:如果有增强样本,增强样本这时便会参与模型训练;如果模型为融化状态,在进行反向传播的时候便会更新卷积层的权重下面是我们建立一个最先进的分类器的步骤
启用数据扩充并设置预计算=真.
使用lr_find()找到丢失仍在明显改善的最高学习率
从预先计算的几个时期的激活中训练最后一层。
在周期长度=1的情况下,用数据扩充(即预计算=假)训练最后一层23个历元。
解冻所有层。
将前几层设置为比下几层更低的学习速率,并对其进行训练。
再次使用lr_find().
用cycle_mult=2训练整个网络,直到过度拟合。
下面是我们通常采取的8个步骤:
1.启用数据增强,并设置预计算(预计算)=真
2.使用lrfind()找到最高的学习速率,其中损失仍在明显改善。
3.为1-2个世的预计算激活训练最后一层
4.用数据增强的方法(即预计算=假)进行最后一层的训练,使用cyclelen=1的2-3个周期
5.解冻所有的层
6.将较早的层设置为比下一个更高层的3倍至10倍降低的学习速率
7.再次使用lr_find()
8.用cycle_mult=2训练整个网络,直到过度拟合
img_f=fnames[0]
img=open_image(img_f) #原形式
img.show(figsize=(5,5))
get _ y _ fn=lambda x:path _ LBL/f " { x . stem } _ P { x . suffix } "
通常很明显。这里,我猜是文件名_P,我创建了一个简单的函数,取文件名,然后加上_P,放到另一个目录里(path_lbl),然后尝试打开它,成功了。
f=a,b,c:a b c中的关键字希腊字母的第11个表示匿名函数,
#冒号:之前的甲、乙、丙表示它们是这个函数的参数。
#匿名函数不需要返回来返回值,表达式本身结果就是返回值。
##图像显示方法
mask=open_mask(get_y_fn(img_f))
mask.show(figsize=(5,5),alpha=1)
cam_fn=fnames[5]cam_img = PILImage.create(cam_fn)
cam_img.resize((224,96))
cam_img.show
test_eq(cam_img.size,(128,96))
tmask=Transform(PILMask.create)
mask _ fn=path/ labels /f { cam _ fn。stem } P { cam _ fn。后缀}
mask=tmask(mask_fn)
test_eq(类型(掩码),PILMask)
test_eq(mask.size,(128,96))
**,axs=plt.subplots(1,3,figsize=(16,15))**
cam_img.show(ctx=axs[0],title=image )
mask.show(alpha=1,ctx=axs[1],vmin=1,vmax=30,title=mask )
cam_img.show(ctx=axs[2],title=叠加)
mask.show(ctx=axs[2],vmin=1,VMAX=30);
dls.show_batch(max_n=4)
learn.show_results(max_n=6,figsize=(15,17))
两种数据加载方式DLS=分段数据加载器。发件人标签功能(
path,bs=8,fnames=fnames,label_func=label_func,codes=代码
)
cam vid=数据块(blocks=(图像块,掩码块(代码)),
get_items=get_image_files,
get_y=label_func,
splitter=RandomSplitter(),
batch _ tfms=aug _ transforms(size=(120,160)))
DLS=视频。数据加载器(路径/“图像”,路径=路径,bs=8)
learn=unet_learner(dls,resnet34)
学习。微调(3)
learn.fine_tune()
这是fastai v2中的一个新方法。因此,在fastai v1中,您仍然需要单独使用这些步骤。
适合一个周期
融化
适合一个周期
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。