[딥러닝 시리즈] Paddle Paddle에 대한 "구덩이"회피 기교
Paddle Paddle의 Anaconda 호환 문제
이전에 저는 서버에 설치된 Paddle Paddle의 gpu 버전입니다. BROAD 데이터를 서버에 복사하려고 했는데 저희 서버의 22포트가 열리지 않아서 scp로 전송할 수 없어서 답답해서 로컬에서만 훈련할 수 있습니다.본 컴퓨터의 맥 그래픽카드는 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
이것은 나를 매우 답답하게 한다. 왜냐하면 이전에 나는 서버에 직접 설치하는 데 문제가 없었지만, 나의 데이터는 전송할 수 없기 때문에 본 컴퓨터에 하나만 설치하고 직접pipinstallpaddlepadle를 설치하여 오류를 초기화할 수 있다.나중에 나는 내 컴퓨터에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_도구로 의존 바꾸기
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의 경로를 찾을 수 없기 때문에 문제가 있을 수 있습니다.
PaddlePadle 데이터 유형 및 데이터 읽기
저는 이 글'[딥러닝 시리즈] Paddle Paddle 데이터 예처리'에서 Paddle Paddle의 기본 데이터 유형과 어떻게 자신의 데이터 집합으로 훈련을 하는지를 썼지만 아직도 많은 학우들이 저에게 메일을 보내서 이 방면의 문제를 물었습니다. 자신의 데이터 집합을 처리할 때 많은 문제에 부딪혔다고 했습니다.다음은 제가 몇 가지 질문을 요약해 보겠습니다.
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, 이 경기에 대하여 우리는 데이터를 분석한 후에 데이터와 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 데이터와 label을 생성하며 되돌아오는 것은reader 함수로 우리 뒤train에 데이터를 넣을 수 있도록 합니다.
물론 다른 방식도 만들 수 있고 여러분이 스스로 발휘할 수 있습니다.
3.좋은 리더를 만드는 훈련으로 어떻게 해야 할지 모르겠어요.
여러분은 이상하게 생각하실 수도 있습니다. 왜 우리가readercreator를 만든 후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_사이즈를 너무 크게 설정하면 안 돼요. 붕괴돼요.
같은 이치로 우리도 val_를 만들 수 있다reader,test_reader.
창설 후 트레이너에 넣고 훈련할 수 있습니다
trainer.train(reader=train_reader,num_passes=20,event_handler=event_handler)
그리고 모델 훈련의 매개 변수 설정 기교에 관해서는 여러분이 많이 시도해 보세요. 만약에 같은 문제가 많다면 제가 다시 정리하여 드리겠습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.