最近除了工作以外,业余在参加Paddle的AI比赛,在用Paddle训练的过程中遇到了一些问题,并找到了解决方法,跟大家分享一下:


PaddlePaddle的Anaconda的兼容问题

  之前我是在服务器上安装的PaddlePaddle的gpu版本,我想把BROAD数据拷贝到服务器上面,结果发现我们服务器的22端口没开,不能用scp传上去,非常郁闷,只能在本地训练。本机mac的显卡是A卡,所以只能装cpu版本的,安装完以后,我发现运行一下程序的时候报错了:

 import paddle.v2 as paddle
 paddle.init(use_gpu=False,trainer_count=1)

  报错:

 Fatal Python error: PyThreadState_Get: no current thread
 Abort trap: 6

  

  这让我非常郁闷,因为之前我直接在服务器上装没有问题,但是我的数据不能传上去,所以只能在本机装一个,直接pip install paddlepaddle,初始化报错。后来我发现我本机装了anaconda,用anaconda的python运行paddle会有一些小问题,不过可以使用otool 和 install_name_tool对_swig_paddle.so进行修改就可以:

  1.运行otool,可以看到pip安装之后的_swig_paddle.so依赖/usr/local/opt/python/Frameworks/Python.framework/Versions/2.7/Python,但实际系统中不存在该路径

 otool -L /anaconda/lib/python2.7/site-packages/py_paddle/_swig_paddle.so
 /anaconda/lib/python2.7/site-packages/py_paddle/_swig_paddle.so:
 /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1445.12.0)
 /System/Library/Frameworks/Security.framework/Versions/A/Security (compatibility version 1.0.0, current version 58286.20.16)
 /usr/local/opt/python/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.0)
 /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.0)
 /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.0.0)

  2.利用install_name_tool来替换依赖

 install_name_tool -change /usr/local/opt/python/Frameworks/Python.framework/Versions/2.7/Python ~/anaconda/lib/libpython2.7.dylib ~/anaconda/lib/python2.7/site-packages/py_paddle/_swig_paddle.so

  3.替换成功后,可以看到第五条已经成功的换成anaconda下的路径了

 otool -L /anaconda/lib/python2.7/site-packages/py_paddle/_swig_paddle.so
 /anaconda/lib/python2.7/site-packages/py_paddle/_swig_paddle.so:
 /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1445.12.0)
 /System/Library/Frameworks/Security.framework/Versions/A/Security (compatibility version 1.0.0, current version 58286.20.16)
 /anaconda/lib/libpython2.7.dylib (compatibility version 2.7.0, current version 2.7.0)
 /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.0)
 /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.0.0)

  现在再运行paddle.init就不会有问题了

   不过要注意一点的是:在第二步中,anaconda的路径要写绝对路径。不能直接进去到anacona的上层目录后直接写/anaconda/lib...,如果这样做,那么你换一个路径再执行paddle.init还是会有问题,因为找不到你的anaconda的路径。


PaddlePaddle数据类型与数据读取

  我在这篇文章“【深度学习系列】PaddlePaddle之数据预处理”中写过PaddlePaddle的基本数据类型与如何用自己的数据集进行训练,但是还有很多同学给我发邮件问我这方面的问题,说在处理自己数据集的时候遇到了很多问题。下面我总结一下几个被问到的问题:

  1.不明白什么时候用sequence数据

  我们知道paddle有四种数据类型:dense_vector、sparse_binary_vector、sparse_float_vector和integer,但是还有三种序列格式,对于dense_vector的话,它的序列格式是dense_vector_sequence,但是什么时候用dense_vector_sequence呢?

  如果你的数据是x = [1.0,2.0,3.0,4.0]这样的,那么就应该用dense_vector,维度即为输入数据的维度(这里我们假设是4),那么应该设置为:

  x = paddle.layer.data(name='x', type=paddle.data_type.dense_vector(4))

  如果你的数据是x = [ [1.0,2.0], [2.0,3.0], [3.0,4.0]],那么我们可以看到这个数据有三个时间步长,应该设置为:

  x = paddle.layer.data(name='x', type=paddle.data_type.dense_vector_sequence(3))

  同理,interger_value和interger_value_sequence也是同样的处理方法,只不过向量里的元素由dense_vector中的float换成了int。

  2.不知道如何创建reader

  在数据预处理那篇文章中举了两个例子来说明如何创建自己的数据集,包括三种方式:reader、reader_creator和reader_decorator,针对于这个比赛,我们将数据解析后,转换成data和label的形式,那么我们应该如何创建reader呢?其实有很多种方式,写一个最简单的方式。我们来创建一个reader creator:

 def reader_creator(data,label):
     def reader():
         for i in xrange(len(data)):
             yield data[i,:],int(label[i])
     return reader

  在这里可以看到,使用了yield生成器来生成数据,分别生成同一个sample的data和label,返回的是一个reader函数,方便我们后面train的时候灌入数据。

  当然也有其他的方式可以创建,大家可以自行发挥。

  

  3.不知道怎么用创建好的reader训练

  大家可能会觉得很奇怪,为什么我们创建了reader creator后要返回一个reader函数呢,其实我们是为了方便在训练的时候调用,下面创建一个train_reader

train_reader = paddle.batch(paddle.reader.shuffle(
                reader_creator(data,label),buf_size=200),
                batch_size=16)

  我们上一步创建好的reader返回的数据放到paddle.reader.shuffle里进行数据混洗,就是把数据打散,buf_size表示我一次性把多少条数据放进来进行shuffle,可以自行设置,混洗好的数据放到paddle.batch里进行,以batch_size的量级批量灌倒模型里去训练,注意如果使用sgd的话,batch_size不能设置的太大,会崩溃,亲测 = =!

  同理,我们也可以创建val_reader,test_reader。

  创建完后,就可以放到trainer里训练了

trainer.train(reader=train_reader,num_passes=20,event_handler=event_handler)

  还有一些关于模型训练的参数设置技巧大家可以多尝试,如果有很多相同的问题话,我会再总结了发出来。

【深度学习系列】关于PaddlePaddle的一些避“坑”技巧的更多相关文章

  1. 【深度学习系列】PaddlePaddle垃圾邮件处理实战(二)

    PaddlePaddle垃圾邮件处理实战(二) 前文回顾   在上篇文章中我们讲了如何用支持向量机对垃圾邮件进行分类,auc为73.3%,本篇讲继续讲如何用PaddlePaddle实现邮件分类,将深度 ...

  2. 【深度学习系列】PaddlePaddle之手写数字识别

    上周在搜索关于深度学习分布式运行方式的资料时,无意间搜到了paddlepaddle,发现这个框架的分布式训练方案做的还挺不错的,想跟大家分享一下.不过呢,这块内容太复杂了,所以就简单的介绍一下padd ...

  3. 【深度学习系列】PaddlePaddle垃圾邮件处理实战(一)

    PaddlePaddle垃圾邮件处理实战(一) 背景介绍   在我们日常生活中,经常会受到各种垃圾邮件,譬如来自商家的广告.打折促销信息.澳门博彩邮件.理财推广信息等,一般来说邮件客户端都会设置一定的 ...

  4. 【深度学习系列】PaddlePaddle可视化之VisualDL

    上篇文章我们讲了如何对模型进行可视化,用的keras手动绘图输出CNN训练的中途结果,本篇文章将讲述如何用PaddlePaddle新开源的VisualDL来进行可视化.在讲VisualDL之前,我们先 ...

  5. 【深度学习系列】PaddlePaddle之数据预处理

    上篇文章讲了卷积神经网络的基本知识,本来这篇文章准备继续深入讲CNN的相关知识和手写CNN,但是有很多同学跟我发邮件或私信问我关于PaddlePaddle如何读取数据.做数据预处理相关的内容.网上看的 ...

  6. 【深度学习系列3】 Mariana CNN并行框架与图像识别

    [深度学习系列3] Mariana CNN并行框架与图像识别 本文是腾讯深度学习系列文章的第三篇,聚焦于腾讯深度学习平台Mariana中深度卷积神经网络Deep CNNs的多GPU模型并行和数据并行框 ...

  7. 【深度学习系列2】Mariana DNN多GPU数据并行框架

    [深度学习系列2]Mariana DNN多GPU数据并行框架  本文是腾讯深度学习系列文章的第二篇,聚焦于腾讯深度学习平台Mariana中深度神经网络DNN的多GPU数据并行框架.   深度神经网络( ...

  8. 深度学习系列 Part(3)

    这是<GPU学习深度学习>系列文章的第三篇,主要是接着上一讲提到的如何自己构建深度神经网络框架中的功能模块,进一步详细介绍 Tensorflow 中 Keras 工具包提供的几种深度神经网 ...

  9. 基于TensorFlow的深度学习系列教程 2——常量Constant

    前面介绍过了Tensorflow的基本概念,比如如何使用tensorboard查看计算图.本篇则着重介绍和整理下Constant相关的内容. 基于TensorFlow的深度学习系列教程 1--Hell ...

随机推荐

  1. 怎样解决jsp:include标签在包括html文件时遇到的乱码问题

    在一个JSP页面中,经常须要包括还有一个文件,JSP为我们提供了jsp:include标签能够完毕这个功能,比方:<jsp:include page="some.jsp"&g ...

  2. C++简易list

    list不同于vector.每一个节点的结构须要自行定义,迭代器属于双向迭代器(不是随即迭代器),也须要自行定义.和通用迭代器一样,list的迭代器须要实现的操作有:++.--.*.->.==. ...

  3. 浅析Spring事务传播行为和隔离级别

    7个传播行为.4个隔离级别. Spring事务的传播行为和隔离级别[transaction behaviorand isolatedlevel] Spring中事务的定义: Propagation(k ...

  4. backbone入门学习一

    初识backbone 1.Backbone是什么? Backbone是一个非常轻量级的javaScript库,可以打造为模型(Model)-视图(View)-控制器(Controller)即MVC类结 ...

  5. Asp.Net Web API(三)

    Routing Tables路由表 在Asp.Net Web API中,一个控制器就是一个处理HTTP请求的类,控制器的public方法就被叫做action方法或简单的Action.当Web API接 ...

  6. Android项目实战(三十八):2017最新 将AndroidLibrary提交到JCenter仓库(图文教程)

    我们经常使用github上的开源项目,使用步骤也很简单 比如: compile 'acffo.xqx.xwaveviewlib:maven:1.0.0' 这里就学习一下如何将自己的类库做出这种可以供他 ...

  7. 《About Face 3:交互设计精髓》【PDF】下载

    <About Face 3:交互设计精髓>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230384328 内容简介 全书分成3篇:第1 ...

  8. cocoapods安装说明,最快安装,以及使用

    安装卸载更新新推荐 文章最后 其他问题总结: 1 添加taobao提供的镜像地址:http://ruby.taobao.org/ 移除命令:gem sources --remove https://r ...

  9. Noip2016换教室(期望+DP)

    Description 题目链接:Luogu Solution 这题结合了DP和概率与期望,其实只要稍微知道什么是期望就可以了, 状态的构造很关键,\(F[i][j][0/1]\)表示已经到第\(i\ ...

  10. Geode集群搭建

    Geode集群搭建 1.下载安装包 http://mirror.bit.edu.cn/apache/geode/1.2.0/ 2.安装解压后即可直接使用 apache-geode-1.2.0 3.进入 ...