seq搜索引擎优化至少包括那几步?(用Paddle数据拷贝到服务器上面,结果发现我们服务器的22端口没开)
优采云 发布时间: 2022-04-15 19:23seq搜索引擎优化至少包括那几步?(用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)
还有一些模型训练的参数设置技巧。你可以多尝试。如果有很多类似的问题,我会总结并发送出去。