[딥러닝 시리즈] Paddle Paddle에 대한 "구덩이"회피 기교

7553 단어
최근 업무 외에 아마추어들이 Paddle의 AI 대회에 참가하면서 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)

 
그리고 모델 훈련의 매개 변수 설정 기교에 관해서는 여러분이 많이 시도해 보세요. 만약에 같은 문제가 많다면 제가 다시 정리하여 드리겠습니다.

좋은 웹페이지 즐겨찾기