站长之家首页 > 传媒 > paddlepaddle最新资讯 > 正文

paddlepaddle图像分类与visualDL尝鲜体验

2018-04-12 17:28 · 稿源:站长之家用户投稿

paddlepaddle图像分类

关于TensorFlow,MXNet中如何训练一个靠谱的图像分类器,这里我会先使用paddlepaddle官方的例子,来学习下如何使用paddlepaddle构建一个靠谱的分类器。

数据介绍

官方文档上使用的数据是flowers-102,这个数据集早在当初tflearn学习深度学习网络的时候就有接触过,还是比较简单的,paddlepaddle把它写成数据接口

模型介绍

paddlepaddle的模型介绍model overview。这里我们在实验当中使用大名鼎鼎的resnet-50:

(关注知乎专栏作者:想飞的石头 https://zhuanlan.zhihu.com/burness-DL 查看源代码)

(关注知乎专栏作者:想飞的石头 https://zhuanlan.zhihu.com/burness-DL 查看源代码)

运行

进入对应目录后

python train.py resnet

即可完成

但是事实上其实不是这样的,paddlepaddle安装whl和tensorflow一样,gpu版本都会对应不同的cuda和cudnn,经常会出一些配置问题,所以直接在系统中安装其实是一个不好的选择,所以最好是不要选择直接安装,而是使用nvidia-docker,同理在tensorflow,mxnet中,感觉nvidia-docker也是很好的。

nvidia-docker安装

  1. 安装cuda、cudnn,最新的;

  2. 根据系统选择对应版本的docker;

  3. 安装nvidia-docker:

a、拉paddlepaddle镜像 docker pull paddlepaddle/paddle:latest-gpu

b、进入docker, nvidia-docker run -it -v $PWD:/work -v /data:/data paddlepaddle/paddle:latest-gpu /bin/bash。这里稍微注意下,paddlepaddle的官方镜像源里面缺少一些必须的包,比如opencv,好像有点问题,还有vim啥的也都没有装,这里为了运行最好把这些环境一次性都解决,然后docker commit,保存对镜像的修改。

(关注知乎专栏作者:想飞的石头 https://zhuanlan.zhihu.com/burness-DL 查看源代码)

基本这样,你就可以在本机上有一个完全干净的docker环境,你就可以随便折腾啦。这里如果有运行不起来的问题,可在下方评论,我具体也不记得缺哪些东西,不过都很好解决的。

docker中运行

这里我运行过很长时间的一个demo,但是因为没有保存好信息,被覆盖了,所以只能暂时演示一下。

使用自己的数据集来训练模型

实验完官方的flower- 102 之后,我们这里使用自己的数据集来训练模型,数据集是之前收集到的鉴黄数据,数据集主要包括三类:porn\sexy\normal,大概有500w张左右。 首先,我们需要生成如下格式,格式为图像路径+"\t"+label,其中label为 0 表示normal, 1 表示sexy, 2 表示porn。 生成脚本如下:

(关注知乎专栏作者:想飞的石头 https://zhuanlan.zhihu.com/burness-DL 查看源代码)

有了脚本运行之后,发现了一些cv2 库中none 没有shape的问题,调试之后发现,原来收集的数据中,有部分大小为 0 或者很小的图像,这部分应该是有问题的数据,写了个滤除脚本,删除这些数据之后就妥了。

  1. 需要配置resnet网络,确定好input和out,配置cost函数,构建parameter;

  2. 构建optimizer,使用momentum的sgd;

  3. 构建reader,设置训练数据读取,配置上文提到的图片路径\tlabel的文件;

  4. event_handler是用来记录batch_id\pass的事件处理函数,传入train函数,训练过程中会完成相应工作;

pretrain model + finetuning

resnet官方提供一个在imagenet上训练好的pretrained model,运行model_download.sh。

sh model_download.sh ResNet50

会下载Paddle_ResNet50.tar.gz, 这个文件是paddlepaddle在ImageNet上训练的模型文件,我们这里使用这个文件的参数做初始化,我们需要在代码,参数初始化的时候,使用这里的参数,修改代码如下:

(关注知乎专栏作者:想飞的石头 https://zhuanlan.zhihu.com/burness-DL 查看源代码)

首先,我们需要指定init_from_tar的参数文件为Paddle_ResNet50.tar.gz, 大家知道ImageNet是在 1000 类上的一个模型,它的输出为 1000 个节点,所以我们这里需要稍作修改,我们增加一个exclud_params,指定最后一层___fc_layer_0__的参数,不要从文件当中初始化.

pretrain model + freeze layers + finetuning

查了文档和代码知道,只需要在某层增加is_static=True,就可以freeze掉该层的参数,使该层参数不更新,但是我在使用这部分时遇到了bug,提了issue (core dumped with is_static=True)[https://github.com/PaddlePaddle/Paddle/issues/8355],出现core的问题,无法正常使用,后面能够搞定了,再更新这部分内容。

代码改进

examples里面的代码reader部分在处理data.lst时,太过粗糙,没有考虑到数据如果出现一些问题时,训练代码会直接挂掉,这部分的代码至少要保证足够的鲁棒性

visualDL实践

可视化acc\loss

之前有在小的demo上体验过visualDL,在比较大的数据训练过程上没试验过,这次鉴黄数据上测试,打印出loss和acc看看,当小数量的step的时候,看起来是没有问题的 如

但是但step较大的时候,acc打印不出来了,同样的代码,出错信息也看不出来,各种莫名的报错,看样子和使用的代码没有什么关系,应该是visualDL本身的容错做的不够好

出错提示:

这部分和之前提过的一个issue很类似: Unexpected error: <type 'exceptions.RuntimeError'> 因为信息量不够,其实很难自己这边做问题分析,希望visualDL把这块容错做好一些。

这块时间应该有些问题,我也不知道,我总觉的有点问题 是我用的姿势不对吗 ?

可视化graph

使用有问题,使用paddlepaddle保存好的模型指定给model_pb 出现如下问题, 看了repo中的这部分的demo都是直接curl下来一个model.pb的文件,然后可视化,没有找到能直接导出paddlepaddle保存模型的导入到visualdl中, 可能是我的使用方式有问题, 保存模型方式如下图:

莫非需要先把paddlepaddle模型转换为onnx格式?

可视化image

有问题,暂时没有测试,之后更新后同步

总结

paddlepaddle现在在dl这块还只是刚开始,example里面的demo和tensorflow最开始一样,并不能完全hold住实际业务需求,当初tensorflow的时候也有种种的问题,后来经过社区的帮助,到现在很多源码几乎都是开箱即用,paddlepaddle现在可能在文档与demo上还是0. 7 版本的tensorflow,不过希望能更加努力,毕竟作为同行,在参与了一些分布式dl模型的工作之后,深知其中的艰辛。visualdl相当棒的工具,支持onnx的模型可视化,虽然在测试过程中感觉有些瑕疵,但是十分支持,希望能快速发展,个人也在阅读这部分源码学习, histogram的相关功能没有测试,非常有用,尤其在训练跑偏的时候可以快速可视化参数的分布。

(关注知乎专栏作者:想飞的石头 https://zhuanlan.zhihu.com/burness-DL 查看源代码)

网友热搜:

免责声明:“站长之家”的传媒资讯页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与我们联系删除或处理。稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性,更不对您的投资构成建议。我们不鼓励任何形式的投资行为、购买使用行为。

  • 大家在看
  • 相关推荐
  • 深度学习再迎高光时刻 百度PaddlePaddle亮“成绩单”

    深度学习正在迎来它的高光时刻。4月23日,首届WAVE SUMMIT 2019深度学习开发者峰会在北京举办,过千位“慕名而来”的开发者与AI专家、学者一道见证了国内真正意义上第一场深度学习开发者盛会。 会上,百度高级副总裁、深度学习技术及应用国家工程实验室主任王海峰表示,“深度学习推动人工智能进入工业大生产阶段,而深度学习框架是智能时代的操作系统。”他认为,深度学习技术已经具备了很强的通用性,正在推动人工智能进入工业大生产阶

  • 三年积累沉淀 百度PaddlePaddle凭借“硬实力”发布11项重磅

    人工智能在60多年的发展历程中,已经从人工规则、机器学习发展到了深度学习的阶段。4月23日,百度举办的首届WAVE SUMMIT 2019深度学习开发者峰会,也让中国深度学习迎来它的高光时刻。作为行业盛会,此次峰会吸引到了上千位开发者、AI专家、学者的共同参与。开源三年的百度PaddlePaddle也在峰会上交出了一份斐然的“成绩单”。百度高级副总裁、深度学习技术及应用国家工程实验室主任王海峰表示,“深度学习正在推动人工智能进入工?

  • 百度开源深度学习平台PaddlePaddle宣布官方中文名“飞桨”

    百度旗下深度学习开源平台“PaddlePaddle”今日发布 11 项新特性及服务,并首次公布PaddlePaddle中文名为“飞桨”。

  • PaddlePaddle可视化之VisualDL

    上篇文章我们讲了如何对模型进行可视化,用的keras手动绘图输出CNN训练的中途结果,本篇文章将讲述如何用PaddlePaddle新开源的VisualDL来进行可视化。在讲VisualDL之前,我们先了解一下常用的Tensorflow的可视化工具---Tensorboard。Tensorflow的可视化 Tensorboard是Tensorflow自带的可视化模块,我们可以通过Tensorboard直观的查看神经网络的结构,训练的收敛情况等。要想掌握Tensorboard,我们需要知道一下几点:支持的数据形式

  • PaddlePaddle进行车牌识别(二)

    上节我们讲了第一部分,如何用生成简易的车牌,这节课中我们会用PaddlePaddle来识别生成的车牌。 数据读取 在上一节生成车牌时,我们可以分别生成训练数据和测试数据,方法如下(完整代码在这里):1 # 将生成的车牌图片写入文件夹,对应的label写入label.txt2 def genBatch(self, batchSize,pos,charRange, outputPath,size):3 if (not os.path.exists(outputPath)):4 os.mkdir(outputPath)5 outfile = open(label.txt,w)6 for i

  • PaddlePaddle进行车牌识别(一)

    小伙伴们,终于到了实战部分了!今天给大家带来的项目是用PaddlePaddle进行车牌识别。车牌识别其实属于比较常见的图像识别的项目了,目前也属于比较成熟的应用,大多数老牌厂家能做到准确率99%+。传统的方法需要对图像进行多次预处理再用机器学习的分类算法进行分类识别,然而深度学习发展起来以后,我们可以通过用CNN来进行端对端的车牌识别。任何模型的训练都离不开数据,在车牌识别中,除了晚上能下载到的一些包含车牌的数据是?

  • 关于PaddlePaddle的一些避“坑”技巧

    最近除了工作以外,业余在参加Paddle的AI比赛,在用Paddle训练的过程中遇到了一些问题,并找到了解决方法,跟大家分享一下:PaddlePaddle的Anaconda的兼容问题 之前我是在服务器上安装的PaddlePaddle的gpu版本,我想把BROAD数据拷贝到服务器上面,结果发现我们服务器的 22 端口没开,不能用scp传上去,非常郁闷,只能在本地训练。本机mac的显卡是A卡,所以只能装cpu版本的,安装完以后,我发现运行一下程序的时候报错了:1 import

  • 百度成立深度学习技术平台推广PaddlePaddle

    7月26日,百度宣布成立深度学习技术平台部,进行深度学习框架PaddlePaddle的研发和推广。

  • PaddlePaddle和Tensorflow实现经典CNN网络GoogLeNet

    前面讲了LeNet、AlexNet和Vgg,这周来讲讲GoogLeNet。GoogLeNet是由google的Christian Szegedy等人在 2014 年的论文《Going Deeper with Convolutions》提出,其最大的亮点是提出一种叫Inception的结构,以此为基础构建GoogLeNet,并在当年的ImageNet分类和检测任务中获得第一,ps:GoogLeNet的取名是为了向YannLeCun的LeNet系列致敬。(本系列所有代码均在github:https://github.com/huxiaoman7/PaddlePaddle_code)关于深度网络的?

  • 2018百度之星决赛揭幕 PaddlePaddle撬动AI未来

    9 月 17 日, 2018 百度之星决赛开幕式在百度大厦举行,比赛分为程序设计大赛与开发者大赛,来自全国各地的 82 名决赛选手在随后的决赛环节进行比拼。决赛开幕式嘉宾启动决赛上海交通大学教授林巍峣、清华大学自动化系副教授鲁继文、中山大学教授郭嵩山、北京邮电大学房鸣教授、清华大学ACM教练邬晓钧以及百度AI技术生态部总经理喻友平等嘉宾出席活动。据了解,本届百度之星参赛人数超过了 13000 人,与去年相比增长30%。决赛首次?

  • PaddlePaddle与Kubernetes强强联合助力深度学习模型高效运转

    美国时间2月8日,Kubernetes社区宣布由百度原创开发的开源深度学习框架PaddlePaddle将兼容集群管理系统Kubernetes,使PaddlePaddle成为迄今为止唯一正式支持 Kubernetes的深度学习框架。 此次兼容将使开发者能够便捷地在全球主要云服务以及私有集群 (on-premise clusters) 上做大规模深度学习训练。该项目由百度和CoreOS联合开发,同时CoreOS也是Kubernetes的主要贡献者之一。 开发者通常会将AI项目与Web服务、日志收集、和数据处?

  • 百度正式宣布推出深度学习开源平台PaddlePaddle

    近日,百度正式对外宣布开放其深度学习开源平台PaddlePaddle,这也是继Google、Facebook、IBM后又一家将人工智能技术开源的公司。

  • 百度正式发布PaddlePaddle深度强化学习框架PARL

    强化学习作为AI技术发展的重要分支,为各家AI公司高度重视。去年,百度首次参与NeurIPS2018 的强化学习赛事,就击败了多达 400 支来自全球研究机构以及各大公司研究部门的参赛队伍,大比分以绝对优势拿下了冠军,并受邀在加拿大蒙特利尔举办的NeurIPS 2018 Competition Workshop上分享。近日,百度PaddlePaddle正式发布在赛事夺冠中起到关键作用的深度强化学习框架PARL,同时开源了基于该框架的NeurIPS2018 强化学习赛事的完整训练

  • 基于PaddlePaddle的点击率的深度学习方法尝试

    ?前言前面在团队内部分享点击率相关的一些文章时,输出了一篇常见计算广告点击率预估算法总结,看了一些广告点击率的文章,从最经典的Logistic Regression到Factorization Machined,FFM,FNN,PNN到今年的DeepFM,还有文章里面没有讲的gbdt+lr这类,一直想找时间实践下,正好这次在学习paddle的时候在它的models目录下看到了DeepFM的实现,因为之前对DeepFM有过比较详细的描述,这里稍微复习一下:DeepFM更有意思的地方是WDL和FM结

  • 百度推出超级人工智能PaddlePaddle:是个“老司机”

    今年早些时候在谷歌人工智能AlphaGo和韩国棋手李世石之间进行的人机大战让人们充分认识到,人工智能现阶段已经发展到能够处理更复杂问题的程度,未来将在人类生活中扮演更重要角色。

  • PaddlePaddle和Tensorflow实现GoogLeNet InceptionV2/V3/V4

    上一篇文章我们引出了GoogLeNet InceptionV1 的网络结构,这篇文章中我们会详细讲到Inception V2/V3/V4 的发展历程以及它们的网络结构和亮点。GoogLeNet Inception V2GoogLeNet Inception V2 在《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》出现,最大亮点是提出了Batch Normalization方法,它起到以下作用:使用较大的学习率而不用特别关心诸如梯度爆炸或消失等优化问题;?

  • 史上最详细的PaddlePaddle从安装到部署、从桌面到服务器

    AI这个概念好像突然就火起来了,年初大比分战胜李世石的AlphaGo成功的吸引了大量的关注,但其实看看你的手机上的语音助手,相机上的人脸识别,今日头条上帮你自动筛选出来的新闻,还有各大音乐软件的歌曲“每日推荐”……形形色色的AI早已进入我们生活的方方面面。深刻的影响了着我们,可以说,这是一个AI的时代。其实早在2016 年 9 月,百度就开源了PaddlePaddle深度学习框架,并且很快就吸引了很多来自百度外的参与者。相信有不

  • 参与评论
文明上网理性发言,请遵守新闻评论服务协议