Jin-jin-jara / Dacon-Competition-NLP

0 stars 2 forks source link

혹시 Bi-Directional-LSTM batch를 돌리게 되면 #1

Open KKodi-Sera opened 4 years ago

KKodi-Sera commented 4 years ago

안녕하세요.

구글 콜라보레이터에서 양방향 LSTM을 작업시도하면 RAM이 최대치에 도달해서

강제로 런타임이 중지되지 않던가요??

이 문제 때문에 Python Jupyter Notebook에서 작업을 했더니 스크린샷 2020-02-25 오전 7 30 05 이 단계에서 다음과 같은 오류가 나네요.

스크린샷 2020-02-25 오전 7 30 21

혹시 양방향 LSTM 과정 콜라보레이터에서 어떻게 돌리셨나요??

Jin-jin-jara commented 4 years ago

아직 정리가 완전히 되지 않은 노트북을 누가 보실지 몰랐습니다 ^^ 창피하네요,,, colab에서 한 번 런타임이 다운되면 25기가 램으로 늘려주는데 25기가 상태에서 4기가 정도 램을 잡아먹고 실행이 되는 것을 확인했습니다.

KKodi-Sera commented 4 years ago

아직 정리가 완전히 되지 않은 노트북을 누가 보실지 몰랐습니다 ^^ 창피하네요,,, colab에서 한 번 런타임이 다운되면 25기가 램으로 늘려주는데 25기가 상태에서 4기가 정도 램을 잡아먹고 실행이 되는 것을 확인했습니다.

PC저는 Bi-LSTM을 돌릴때 콜라보레이터가 바쁨 단계로 바뀌면서 힘들어하더라구요. 그럼 혹시 BI-LSTM 모형을 w2v 처럼 save, load 함수를 어떻게 쓸 수 있을까요? sequential_1 을 save 해야할까요? 아니면 model_lstm을 해야할까요??

model을 콜라보에서 저장시키고 Jupyter에서 불러오려고 하거든요. 첫 글에서 제시한 def build_model 부분이 아나콘다3 주피터랩에서 안되네요 ㅠㅠ 스크린샷 2020-02-26 오전 4 35 51

Jin-jin-jara commented 4 years ago

에러를 보면 아마 input shape의 문제인 것 같습니다. 모델이 돌아가긴 하는데 램이 나가는 건가요? 아니면 모델이 돌아가지도 않나요? 모델이 돌아간다면 model_lstm을 저장하시고 쓰면 될 것 같습니다. 모델을 저장하는 방법은, from keras.models import load_model model_lstm.save('model_lstm.h5')

이렇게 하시면 될겁니다. 불러올땐 model = load_model('model_lstm.h5')

모델이 돌아가지도 않는다면 모델에 입력값인 input 형상을 다시 확인해봐야할 것 같습니다!

KKodi-Sera commented 4 years ago

에러를 보면 아마 input shape의 문제인 것 같습니다. 모델이 돌아가긴 하는데 램이 나가는 건가요? 아니면 모델이 돌아가지도 않나요? 모델이 돌아간다면 model_lstm을 저장하시고 쓰면 될 것 같습니다. 모델을 저장하는 방법은, from keras.models import load_model model_lstm.save('model_lstm.h5')

이렇게 하시면 될겁니다. 불러올땐 model = load_model('model_lstm.h5')

모델이 돌아가지도 않는다면 모델에 입력값인 input 형상을 다시 확인해봐야할 것 같습니다!

  • def build_model 부분이 주피터에서 안된다고 하셨는데 혹시 주피터 노트북에 tensorflow를 설치 하셨는지 확인해보시는 것도 한 방법일듯합니다. keras를 사용하고 있기 때문에 tensorflow가 설치가 안되어 있으면 실행에 문제가 있을 수 있습니다. :)

친절한 답변 너무나 감사합니다. 좋은 코드도 공유해주셨는데 도움 많이 얻고 갑니다 !

위의 class, def 문제는 해결했습니다. 찾아보니 Google Colaboratory의 Keras, numpy, tensorflow와 JupyterNotebook의 설치 버전이 우선 달랐고 class 정의 마지막에 def get_config(self): return super(attention,self).get_config() 이 함수를 추가해줌으로써 해결했습니다.

저의 경우 말뭉치가 길고 샘플 데이터가 너무 많아서 작업하는데 시간이 오래걸리더라구요. batch size를 128로 준게 잘못인거 같습니다.. 1024로 주었더니 RAM 25GB가 넘어버려서 강제로 런타임 종료가 되었구요. ㅠㅠ

아래의 batch size를 통한 학습이 끝난후 위에서 안내해주신 함수대로 입력하면 훈련된 epoch 정보가 모두 저장이 되나요? trained 라는 함수에 입력이 되어있는것 같아서용 qew

Jin-jin-jara commented 4 years ago

해결되셨다니 다행이네요!!! 아시는것 처럼 딥러닝에서 학습은 최적의 가중치와 편향을 찾아가는 일입니다. model.save를 하면 epoch정보가 저장되는 것은 아니고 훈련동안 학습된 가중치와 편향 매개변수들이 저장됩니다. 그래서 모델을 불러오면 그 저장된 가중치들을 가져오는 것이구요. trained는 모델을 학습시킨후 accuracy와 loss를 확인해보기 위해 할당한 변수입니다. fit할때 loss, acc, val_loss, val_acc를 리턴받습니다 :)

KKodi-Sera commented 4 years ago

안녕하세요. 항상 친절히 알려주셔서 너무나 감사합니다.

lstm model을 save했다가 불러오는 경우 다음과 같은 에러가 발생하는데 혹시 해결방법에 대해 아시나요? ㅠㅠ

스크린샷 2020-03-09 오전 12 56 11

custom 함수를 줘봤는데 그래도 에러가 발생하네요.. 스크린샷 2020-03-09 오전 12 57 12