seq搜索引擎优化至少包括那几步?(用Paddle数据拷贝到服务器上面,结果发现我们服务器的22端口没开)

优采云 发布时间: 2022-04-15 19:23

  seq搜索引擎优化至少包括那几步?(用Paddle数据拷贝到服务器上面,结果发现我们服务器的22端口没开)

  最近除了工作,我还以业余的身份参加了 Paddle 的 AI 比赛。我在使用 Paddle 进行训练时遇到了一些问题,并找到了解决方案。我想和你分享:

  PaddlePaddle 的 Anaconda 的兼容性问题

  之前,我在服务器上安装了 gpu 版本的 PaddlePaddle。我想将 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:

  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的路径要写成绝对路径。不能直接到anaconda的上层目录写/anaconda/lib....这样的话还是会出现改路径再执行paddle.init的问题,因为你anaconda的路径找不到。

  PaddlePaddle 数据类型和数据读取

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

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

  我们知道 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,维度就是输入数据的维度of (这里我们假设它是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]],那么我们可以看到这个数据有3个时间步,每个时间步的向量维数都是2,应该设置为:

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

  同样,interger_value和interger_value_sequence的处理方式相同,只是vector中的元素用dense_vector中float中的int替换。

  2.不知道如何创建阅读器

  在数据预处理文章文章中,给出了两个例子来说明如何创建自己的数据集,包括三种方法:reader、reader_creator和reader_decorator。对于本次比赛,我们解析数据并将其转换为数据和标签的形式,我们应该如何创建阅读器?其实有很多方法可以写出最简单的方法。让我们创建一个阅读器创建者:

  

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 generator来生成数据,分别生成同一个样本的data和label,并返回一个reader函数,方便我们后面训练时填写数据。

  当然,还有其他的创作方式,大家可以自己玩。

  3.我不知道如何与创建的阅读器一起训练

  你可能觉得很奇怪,为什么我们在创建 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进行数据shuffle,也就是对数据进行shuffle。buf_size表示我一次放入shuffle多少条数据,可以自己设置,shuffle好。将数据放入paddle.batch,按照batch_size的顺序分批倒入模型中进行训练。注意如果使用sgd,batch_size不能设置太大,会崩溃。自己测试一下= =!

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

  创建完成后,您可以将其放入训练器进行训练。

  

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

  还有一些模型训练的参数设置技巧。你可以多尝试。如果有很多类似的问题,我会总结并发送出去。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线