热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【深度学习系列】关于PaddlePaddle的一些避“坑”技巧,【深度学习系列】PaddlePaddle之数据预处理

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

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

PaddlePaddle的Anaconda的兼容问题

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

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

   报错:

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

  

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

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

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

  2.利用install_name_tool来替换依赖

1 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下的路径了

1 otool -L /anaconda/lib/python2.7/site-packages/py_paddle/_swig_paddle.so
2 /anaconda/lib/python2.7/site-packages/py_paddle/_swig_paddle.so:
3 /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1445.12.0)
4 /System/Library/Frameworks/Security.framework/Versions/A/Security (compatibility version 1.0.0, current version 58286.20.16)
5 /anaconda/lib/libpython2.7.dylib (compatibility version 2.7.0, current version 2.7.0)
6 /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.0)
7 /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]],那么我们可以看到这个数据有三个时间步长,每个时间步的向量维度是2,应该设置为:

  x = paddle.layer.data(name=’x’, type=paddle.data_type.dense_vector_sequence(2))

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

 

  2.不知道如何创建reader

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

1 def reader_creator(data,label):
2 def reader():
3 for i in xrange(len(data)):
4 yield data[i,:],int(label[i])
5 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)

 

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

 


推荐阅读
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • 通过Anaconda安装tensorflow,并安装运行spyder编译器的完整教程
    本文提供了一个完整的教程,介绍了如何通过Anaconda安装tensorflow,并安装运行spyder编译器。文章详细介绍了安装Anaconda、创建tensorflow环境、安装GPU版本tensorflow、安装和运行Spyder编译器以及安装OpenCV等步骤。该教程适用于Windows 8操作系统,并提供了相关的网址供参考。通过本教程,读者可以轻松地安装和配置tensorflow环境,以及运行spyder编译器进行开发。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 本文讨论了在iOS平台中的Metal框架中,对于if语句中的判断条件的限制和处理方式。作者提到了在Metal shader中,判断条件不能写得太长太复杂,否则可能导致程序停留或没有响应。作者还分享了自己的经验,建议在CPU端进行处理,以避免出现问题。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 技嘉秀高端B450主板:不再支持第七代APU,性价比高且兼容锐龙一代和二代
    在台北电脑展上,技嘉展示了一款高端的B450主板,型号为“b450 aorus pro wi-fi”。该主板具有10+1相供电、散热片覆盖的供电区域和芯片组,以及两个m.2插槽和背部IO挡板。虽然不支持第七代APU bristol ridge,但它兼容锐龙一代和二代,且具有较高的性价比。该主板还配备了音频声卡、Wi-Fi无线网卡等功能,是一款性能出色且设计精良的主板。 ... [详细]
  • Learning to Paint with Model-based Deep Reinforcement Learning
    本文介绍了一种基于模型的深度强化学习方法,通过结合神经渲染器,教机器像人类画家一样进行绘画。该方法能够生成笔画的坐标点、半径、透明度、颜色值等,以生成类似于给定目标图像的绘画。文章还讨论了该方法面临的挑战,包括绘制纹理丰富的图像等。通过对比实验的结果,作者证明了基于模型的深度强化学习方法相对于基于模型的DDPG和模型无关的DDPG方法的优势。该研究对于深度强化学习在绘画领域的应用具有重要意义。 ... [详细]
author-avatar
手机用户2602929123
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有