标签式网站内容管理,安徽网站建设,网站系统建设费用,博达网站建设飞桨(PaddlePaddle)核心框架Paddle Fluid v1.5已经发布#xff0c;而作为其关键工具#xff0c;用来迁移学习的PaddleHub也进行了全面更新#xff0c;正式发布了1.0版本。全新的PaddleHub模型和任务更加丰富#xff0c;为用户提供了覆盖 文本 、 图像 和 视频 三大领域八大…飞桨(PaddlePaddle)核心框架Paddle Fluid v1.5已经发布而作为其关键工具用来迁移学习的PaddleHub也进行了全面更新正式发布了1.0版本。全新的PaddleHub模型和任务更加丰富为用户提供了覆盖 文本 、 图像 和 视频 三大领域八大任务的 40预训练模型 同时还在飞桨官网上开辟了PaddleHub的网页。本文将对PaddleHub及其更新做更加全面的介绍。PaddleHub是什么深度学习模型的价值在AI时代不断增大。要想得到一个高质量的深度学习模型离不开4个要素优秀的算法、充足的算力、丰富的数据以及专家知识。大家在深度学习中常常遇到以下问题一些研究领域只有少量标注数据且数据标注成本较高不足以训练一个足够鲁棒的神经网络大规模神经网络的训练依赖于大量的计算资源这对于一般用户而言难以实现应对于普适化需求的模型在特定应用上表现不尽如人意PaddleHub就是为了解决对深度学习模型的需求而开发的工具。它基于飞桨领先的核心框架精选效果优秀的算法提供了百亿级大数据训练的预训练模型方便用户不用花费大量精力从头开始训练一个模型。PaddleHub可以便捷地获取这些预训练模型完成模型的管理和一键预测。配合使用Fine-tune API可以基于大规模预训练模型快速完成迁移学习让预训练模型能更好地服务于用户特定场景的应用。PaddleHub有什么特色1、 通过PaddleHub开发者可以便捷地获取飞桨生态下的所有预训练模型涵盖了图像分类、目标检测、词法分析、语义模型、情感分析、语言模型、视频分类、图像生成八类主流模型40余个如图1 所示。飞桨还发布了PaddleHub的官方网页对各个预训练模型的应用提供了详实的介绍。△ 图1 PaddleHub提供了40官方预训练模型2、PaddleHub引入了模型即软件的概念通过Python API或者命令行工具一键完成预训练模型地预测。此外还借鉴了Anaconda和pip软件包管理的理念设计了一套命令行接口。深度学习时代模型发展的趋势会逐渐向软件工程靠拢未来模型可以当作一个可执行程序一键预测也可以是第三方库通过模型插拔的方式提高开发者的开发效率。同时模型会有版本的概念通过不断迭代升级的方式提升我们模型的效果。通过命令行工具可以方便快捷的完成模型的搜索、下载、安装、预测等功能对应的关键的命令分别是searchdownloadinstallrun等。如以下示例在安装完成飞桨和PaddleHub以后(具体安装方法见后文示例)使用词法分析模型LAC可以一键实现分词。$ hub run lac --input_text 今天是个好日子[{word: [今天, 是, 个, 好日子], tag: [TIME, v, q, n]}]再如以下示例所示是一个目标检测的例子通过hub run 调用不同的目标检测模型一行即可完成预测同时也可以快速体验哪个模型能更符合开发的需求。$ hub run yolov3_coco2017 --input_path test.jpg$ hub run faster_rcnn_coco2017 --input_path test.jpg△ 图2 PaddleHub一键完成预训练模型地预测3、通过PaddleHub Fine-tune API结合少量代码即可完成大规模预训练模型的迁移学习。下面一节我们也会全面介绍PaddleHub的API。PaddleHub API全景PaddleHub API的全景图如图3所示。为了更好帮助用户更好的应用预训练模型PaddleHub对Fine-tune做了6个层次的抽象。△ 图3 PaddleHub Fine-tune API全景数据集Dataset PaddleHub提供多种NLP任务和CV任务的数据集用户也可以在自定义数据集上完成Fine-tune。数据预处理Reader PaddleHub的数据预处理模块Reader对常见的NLP和CV任务进行了抽象。预训练模型Module Module代表了一个预训练模型。优化策略Strategy 在PaddleHub中Strategy类封装了一系列适用于迁移学习的Fine-tune策略。Strategy包含了对预训练参数使用什么学习率变化策略使用哪种类型的优化器使用什么类型的正则化等。运行配置 RunConfig 在PaddleHub中RunConfig代表了在对Task进行Fine-tune时的运行配置。包括运行的epoch次数、batch的大小、是否使用GPU训练等。迁移任务Task PaddleHub预置了常见任务的Task。Task代表了一个Fine-tune的任务。任务中包含了执行该任务相关的Program、数据Reader、运行配置等内容。每种Task都有自己特有的应用场景以及提供了对应的度量指标用于适应用户的不同需求。预置的任务类型包括图像分类、文本分类、序列分类和多标签分类各类任务。PaddleHub还支持用户可以通过继承BasicTask来实现自己的任务。PaddleHub封装了finetune、eval、finetune_and_eval、predict等直观的基础接口让开发者更方便完成模型的迁移和应用。如何快速开始△ 图4 PaddleHub Fine-tune API使用接下来本文结合实际案例讲述如何快速使用PaddleHub实现十行代码完成文本分类迁移。场景是标注数据不多中文文本分类场景如何提高分类的精度和模型的泛化能力。这里的方案是借助ERNIE PaddleHub Finetune API除去安装只想要5个步骤10行代码即可解决这一问题。这里先介绍一下ERNIE它是百度发布的知识增强的预训练模型通过建模海量数据中的词、实体及实体关系学习真实世界的语义知识。具体来说ERNIE 模型通过对词、实体等语义单元的掩码使得模型学习完整概念的语义表示。相较于 BERT 学习原始语言信号ERNIE 直接对先验语义知识单元进行建模增强了模型语义表示能力。ERNIE在多个公开的中文数据集上进行了效果验证包括语言推断、语义相似度、命名实体识别、情感分析、问答匹配等自然语言处理各类任务上均超越了语义表示模型 BERT 的效果。接下来开始实战演练PaddleHub。1. 安装$ pip install paddlepaddle #CPU安装命令或者$ pip install paddlepaddle-gpu # GPU安装以上命令是安装CPU或者GPU版本的飞桨。通过以下命令则可以安装PaddleHub。$ pip install paddlehub另外PaddleHub内置了深度学习可视化工具VisualDL的依赖通过VisualDL可以很好的对深度学习任务进行可视化。2. 选择预训练模型在完成安装飞桨与PaddleHubimport导入相应模块后一行代码即可加载预训练模型。只要1分钟你就能得到万级别GPU小时训练出来的ERNIE模型。当然也可以支持BERT模型调用只需要更换不同的模型名称即可。import paddle.fluid as fluidimport paddlehub as hubmodule hub.Module(nameernie)inputs, outputs, program module.context(trainableTrue, max_seq_len128)第二步是获取模型上下文包括了预训练模型的输入Tensor输出Tensor还有计算图。这里面有个关键参数是trainable。如果trainable为True那么就是一个fine-tune的任务预训练模型的参数会做微调以更好的适应顶层的应用、如果trainable为False那么就预训练模型参数保持不变将它当作特征提取器。对于ERNIE模型而言不推荐使用特征提取一定要通过Finetune的方式才能取得更好的效果。3. 数据处理选择模型后就是进行数据预处理针对不同的迁移任务做了一系列数据处理的封装。dataset hub.dataset.ChnSentiCorp()reader hub.reader.ClassifyReader( datasetdataset, vocab_pathmodule.get_vocab_path(), max_seq_len128)hub.dataset.ChnSentiCorp() 会自动从网络下载数据集并解压到用户目录下。4. 策略配置接下来开始配置Fine-tune时用到的优化策略。针对ERNIE与BERT类任务PaddleHub封装了适合这一任务的迁移学习优化策略AdamWeightDecayStrategystrategy hub.AdamWeightDecayStrategy(learning_rate5e-5, weight_decay0.01, lr_schedulerlinear_decay,)confighub.RunConfig(use_cudaTrue, num_epoch3,batch_size32,checkpoint_dir ckpt_dir,strategystrategy)5. 创建迁移学习任务组建移学习任务这块也非常简单首先是选择预训练的模型输出作为我们句子的特征。在这里ERNIE我们选择pooled_output作为句子的特征输出。也可以通过获取sequence_output来得到词粒度的特征这个特征般用于序列标注。pooled_output outputs[pooled_output]# feed_list的Tensor顺序不可以调整feed_list [ inputs[input_ids].name, inputs[position_ids].name, inputs[segment_ids].name, inputs[input_mask].name,]cls_task hub.TextClassifierTask( data_readerreader, featurepooled_output, feed_listfeed_list, num_classesdataset.num_labels, configconfig)cls_task.finetune_and_eval()Finetuning API非常智能会自动完成评估保存最优模型还有自动可视化的功能。Finetune API训练过程中会自动对关键训练指标进行打点启动程序后执行下面命令$ visualdl --logdir ckpt_dir/vdllog -t ${HOST_IP}其中${HOST_IP}为本机IP地址如本机IP地址为192.168.0.1用浏览器打开192.168.0.1:8040其中8040为端口号即可看到训练过程中指标的变化情况6. 模型预测通过Finetune完成模型训练后在对应的ckpt_dir目录下会自动保存验证集上效果最好的模型。接下来可以按照如下的示例进行预测。# Data to be prdicteddata [ [这个宾馆比较陈旧了特价的房间也很一般。总体来说一般], [交通方便环境很好服务态度很好 房间较小],[还稍微重了点可能是硬盘大的原故还要再轻半斤就好了。其他要进一步验证。贴的几种膜气泡较多用不了多久就要更换了屏幕膜稍好点但比没有要强多了。建议配赠几张膜让用用户自己贴。],[ 前台接待太差酒店有A B楼之分本人checkin后前台未告诉B楼在何处并且B楼无明显指示房间太小根本不像4星级设施下次不会再选择入住此店啦], [19天硬盘就罢工了~~~算上运来的一周都没用上15天~~~可就是不能换了~~~唉~~~~你说这算什么事呀~~~]]index 0run_states cls_task.predict(datadata)results [run_state.run_results for run_state in run_states]for batch_result in results: # get predict index batch_result np.argmax(batch_result, axis2)[0] for result in batch_result: print(%stpredict%s % (data[index][0], result)) index 1除了以上的介绍PaddleHub还在AI Studio和AIBook上提供了IPython NoteBook形式的demo开发者可以直接在平台上在线体验PaddleHub带来的各种便捷。此外AI studio平台还发布了 亿元算力支持计划 提供了“每日运行赠12小时”和“连续5天运行赠48小时”两种机制共同服务每天都得能轻松获得该平台集成算力、教程、 样例模型、工程开发、在线部署的能力, 乃至比赛平台满足从0基础学习到技术落地的全生命周期帮助开发者全面掌握深度学习技术的各方各面。