蒸汽朋克,十余行代码完结搬迁学习,百度PaddleHub实战解读,新年歌曲

机器之心专栏

来历:百度 PafillddlePaddle

搬家学习 (Transfer Learning) 是归于深度学习的一个子研讨范畴,该研讨范畴的方针在于运用数据、使命、或模型之间的相似性,将在旧范畴学习过的常识,搬家运用于新范畴中。搬家学习招引了许多研讨者投身其间,因为它能够很好的处理深度学习中的以下几个问题:

为了让开发者更快捷地运用搬家学习,百度 PaddlePaddle 开源了预练习模型办理东西 PaddleHub。开发者用运用只是十余行的代码,就能完快穿之完美命运成搬家学习。本文将为读者全面介绍 PaddleHub 并其运用办法。

项目地址:https://github.com/PaddlePaddle/PaddleHub

PaddleHub 介绍

PaddleHub 是根据 PaddlePaddle 开发的预练习模型办理东西,能够凭借预练习模型更快捷地展开搬家学习作业,旨在让 PaddlePaddle 生态下的开发者更快捷体会到大规模预练习模型的价值。

PaddleHub 现在的预练习模型覆盖了图画分类、方针检测、词法剖析、Transformer、情感剖析五大类别。未来会继续敞开更多类型的深度学习模型,如言语模型、视频分类、图画生成等预练习模型。PaddleHub 的功用全景如图 1 所示。

图 1 PaddleHub 功用全景

PaddleHub 首要包含两个功用:指令行东西和 Fine-tune API。

指令行东西

PaddleHub 学习了 Anaconda 和 PIP 等软件包办理的理念,开发了指令行东西,能够方便快捷的结束模型的查找、下载、装置、猜测等功用,对应的要害的指令别离是 search,download,install,run 等。咱们以 run 指令为例,介绍怎么经过指令行东西进行猜测。

Run 指令用于履行 Module 的猜测,这蒸汽朋克,十余行代码结束搬家学习,百度PaddleHub实战解读,新年歌曲里别离举一个 NLP 和 CV 的比如。

关于 NLP 使命:输入数据经过--input_text 指定。以百度 LAC 模型(中文词法剖析)为例,能够经过以下指令结束单行文本剖析。

# 单文本猜测

$ hub run lac --input_text "今天是个好日子"

关于 CV 使命:输入数据经过--input_path 指定。以 SSD 模型(单阶段方针检测)为比如,能够经过以下指令结束单张图片的猜测

# 运用SSD检测模型对图片进行方针检测,第一条指令是下载图片,第二条指令是履行猜测,用户也能够自

# 己预备图片

$ wget --no-check-c快递什么时候上班ertificate https: //paddlehub.bj.bcebos.com/resources/test_img_bird.jpg

$ hub run ssd_mobilenet_v1_pascal --input_path test_img_bird.jpg

更多的指令用法,请读者参阅文首的 Github 项目链接。

Fine-tune API

PaddleHub 供给了根据 PaddlePaddle 结束的 Fine-tune API, 要点针对大规模预练习模型的 Fine-tune 使命做了高阶的笼统,让预练习模型能更好服务于用户特定场景的运用。经过大规模预练习模型结合 Fine-tune,能够在更短的时刻结束模型的收敛,一起具有更好的泛化才能。PaddleHub API 的全景如图 2 所示。

图 2 PaddleHub Fine-tune API 全景

根据以上介绍的 PaddleHub 两大功用,用户能够结束:

以下将从实战视点,教你怎么运用 PaddleHub 进行图画分类搬家。

PaddleHub 实战

1. 装置

PaddleHub 是根据 PaddlePaddle 的预练习模型办理结构,运用 PaddleHub 前需求先装置 PaddlePaddle,假如你本地现已装置了 CPU 或许 GPU 版别的 PaddlePaddle,那么能够越过以下装置进程。

$ pip install paddlepaddle #CPU 装置指令

或许

$ pip install paddlepaddle-gpu # GPU 装置

引荐运用大于 1.4.0 版别的 PaddlePaddle。

经过以下指令来装置 PaddleHub

$ pip in蒸汽朋克,十余行代码结束搬家学习,百度PaddleHub实战解读,新年歌曲stall paddlehub

2. 挑选适宜的模型

首要导入必要的 python 包

# -*- coding: utf8 -*-

importpaddlehub ashub

importpaddle.fluid asfluid

接下来咱们要在 PaddleHub 中挑选适宜的预练习模型来 Fine-tune,因为猫狗分类是一个图画分类使命,因而咱们运用经典的 ResNet-50 作为预练习模型。PaddleHub 供给了丰厚的图画分类预练习模型,包含了最新的神经网络架构查找类的 PNASNet,咱们引荐你测验不同的预练习模型来取得更好的功能。

module_map = {

"resnet50": "resnet_v2_50_imagenet",

"resnet101": "resnet_v2_101_imagenet",

"resnet152": "resnet_v2_152_imagenet",

"mobilenet": "mobilenet_v2_imagenet",

"nasnet": "nasnet_imagenet",

"pnasnet": "pnasnet_thenimagenet"

}

module_name = module_m玉米排骨汤ap[ "resnet50"]

module= hub.Module(name = module_name)

3. 数据预备

接着需求加载图片数据集。为了快速体会,咱们直接加载 PaddleHub 供给的猫狗分类数据集,假如想要运用自定义的数据进行体会,请检查自定义数据。

# 直接用PaddleHub供给的数据集

dataset = hub.dataset.DogCat()

4. 自定义数据

本节阐明怎么拼装自定义的数据,假如想运用猫狗数据集进行体会,能够直接越过本节。

运用自定义数据时,咱们需求自己切分数据集,将数据集且分为练习集、验证集和测试集。

一起运用三个文本文件来记载对应的图片途径和标签,此外还需求一个标签文件用于记载标签的称号。

├─data: 数据目录 蒸汽朋克,十余行代码结束搬家学习,百度PaddleHub实战解读,新年歌曲

  ├─train_list.txt:练习集数据列表

  ├─test_list.txt:测试集数据列表

  ├─validate_list.txt:验证集数据列表

├─label_list.txt:标签列表

  └─……

练习/验证/测试集的数据列表文件的格局如下

图片 1途径 图片 1标签

图片 2途径 图片 2标签

...

标签列表文件的格局如下

分类 1称号

分类 日本女优排名2称号

...

运用如下的方法进行加载数据,生成数据集目标

留意事项:

# 运用本地数据集

classMyDataSet(hub.dataset.base_cv_dataset.ImageClassificationDataset):

def__init__(self):

self.base_path= "/test/data"

self.train_list_file = "train_list.txt"

self.test_list_file = "test_list.txt"

self.validate_list_file = "validate_list.txt"

self.label臀缝_list_file = "label_list.txt"

self.label_list = None

self.num_labels = 2

5. 生成 Reader

接着生成一个图画分类的 reader,reader 担任将 dataset 的shine数据进行预处理,接着以特定格局安排并输入给模型进行练习。

当咱们生成一个图画分类的 reader 时,需求指定输入图片的巨细

data_reader = hub.reader.ImageClassificationReader(

image_width= module.ge烤箱烤鸡翅t_expected_image_width(),

image_height= module.get_expected_image_height(),

images_mean= module.get_pretrained_images_mean(),

images_std= module.get_pretrained_images_std(),

dataset=dataset)

6. 组成 Fine-tune Task

有了适宜的预练习模型和预备要搬家的数据集后,咱们开端组成一个 Task。

因为猫狗分类是一个二分类的使命,而咱们下载的 cv_classifer_mod蒸汽朋克,十余行代码结束搬家学习,百度PaddleHub实战解读,新年歌曲ule 是在 ImageNet 数据集上练习的千分类模型,所以咱们需求对模型进行简略的微调,把模型改造为一个二分类模型:

input_dict, output_dict, program = module.context(trainable=True)

img = input_dict[ "image"]

feature_map = output_dict[ "feature_map"]

task = hub.create_img_cls_task(

feature=feature_map, num_classes=dataset.num_labels)

feed_list = [img.name, task.variable( "label").name]

7. 挑选运转时装备

在进行 Fine-tune 前,咱们能够设置一些运转时的装备,例如如下代码中的装备,表明:

更多运转装备,请检查文首的 Github 项目链接。

config = hub.RunConfig(

use_cuda=False,

num_epoch= 1,

checkpoint_dir= "金珠失真记cv_finetune_turtorial_demo",

batch_蒸汽朋克,十余行代码结束搬家学习,百度PaddleHub实战解读,新年歌曲size= 32,

log_interval= 10,

eval_interval= 50,

strategy=hub.finetune.strategy.DefaultFinetuneStrategy())

8. 开端 Fine-tune

咱们挑选 Fine-tune_and_eval 接口来进行模型练习,这个接口在 Fine-tune 的进程中,会周期性的进行模型作用的评价,以便咱们了解整个练习进程的功能改变。

hub.finetune_and_eval(

task, feed_list=feed_list, data_reader=data_reader, config=config)

9. 检查练习进程的作用

练习进程中的功能数据会被记载到本地,咱们能够经过 visualdl 来可视化这些数据。

咱们在 shell 中输入以下指令来发动 visualdl,其间${HOST_IP} 为本机 IP,需求用户自行指定

$ visualdl --logdir ./ cv_finetune_turtori美国老奶奶al_demo/vdllog --host ${HOST_IP} --port 8989

发动服务后,咱们运用浏览器拜访${HOST_IP}:8989,能够看到练习以及猜测的 loss 曲线和 accuracy 曲线,如下图所示。

王卫

10. 运用模型进行猜测

当 Fine-tune 结束后,咱们运用模型来进行猜测,整个猜测流程大致能够分为以下几步:超级赛亚人

经过以下指令来获取测试的图片(适用于猫狗分类的数据集)

$ wget --no-check-certificate https: //PaddleHub.bj.bcebos.com/resources/test_img_cat.jpg

$ wget --no-check-certificate https: //PaddleHub.bj.bcebos.com/resources/test_img_dog.jpg

留意:其他数据集所用的测试图片请自行预备。

完好猜测代码如下:

importos

importnumpy asnp

import邃古里paddle.fluid asfluid

importpaddlehub ashub

# Step 1: build Program

module_map = { 徐语舒

"resnet50": "resnet_v2_50_imagenet",

"resnet101": "resnet_v2_101_imagenet",

"resnet152": "resnet_v2_152_imagenet",

"mobilenet": "mobilenet_v2_imagenet",

"nasnet": "nasnet_imagenet",

"pnasnet": "pnasnet_imagenet"

}

mo一岁宝宝食谱dule_name = module_map[ "resnet50"]

module= hub.Module(name = module_name)

input_dict, output_dict, program = module.context(trainable=False)

img = i深圳地铁11号线nput_dict[ "image"]

feature_map = output_dict[ "feature_map"]

dataset = hub.dataset.DogCat()

task = hub.create_img_cls_task(

feature=feature_map, num_classes=dataset.num_labels)

feed_list = [img.name]

# Step 2: create data reader

data = [

"test_img_dog.jpg蒸汽朋克,十余行代码结束搬家学习,百度PaddleHub实战解读,新年歌曲",

"test_img_cat.jpg"

]

data_reader = hub.reader.ImageClassificationReader(

image_width= module.get_expected_image_width(),

image_height= module.get_expected_image_height(),

images_mean= module.get_pretrained_images_mean(),

images_std= module.get_pretrained_images_std(),

dataset=None)

predict_reader = data_reader.data_generator(

phase= "predict", batch_size=四级 1, data=data)

label_dict = dataset.label_dict()

# Step 3: switchto inference program

withfluid.program_guard(task.inference_program()):

# Step 4: load pretrained parameters

place = fluid.CPUPlace()

exe = fluid.Executor(place)

pretrained_model_dir = os.path.join( "cv_finetune_turtorial_demo", "best_model")

fluid.io.load_persistables(exe, pretrained_model_dir)

feeder = fluid.DataFeeder(feed_list=feed_list, place=葳蕤place)

# Step 5: predict

forindex, batch inenumerate(predict_reader()):

result, = exe.run(

feed=feeder.feed(batch), fetch_list=[task.variable( 'probs')])

predict_result = np.argsort(result[ 0])[:: -1][ 0]

print( "input %i is %s, and the predict result is %s"%

(index+ 1, data[index], label_dict[predict_result]))

本文为机器之心专栏,转载请联络本大众号取得授权。

蒸汽朋克,十余行代码结束搬家学习,百度PaddleHub实战解读,新年歌曲
声明:该文观念仅代表作者自己,搜狐号系信息发布渠道,搜狐仅供给信息存储空间服务。
  •   【相关报导】

      科创板收评:走势越来越“稳” 榜第一批25股离别“无涨跌幅限制”

      与前四个生意日比较,今天科创板股走得比较“稳”。

      在无涨跌幅限制最终一个生意日,榜第一批上市的科创板25星宿,与主板这边相较,走势有些“沉寂”。截午时至收盘,仅3股上涨,

  •   热弯玻璃有麻点一般解决办法是运用玻璃脱模剂。

      玻璃脱模剂耐高温达1200C,润天马行空滑功能超矣,热弯玻璃有麻点该怎样办 玻璃该怎样进行热弯处理,欧元兑人民币群,水性,无毒,无污染,高环保,具有优胜的成膜粘附力,而且与熔融

  • 最新留言