안녕하세요?


이번 포스팅에서는 기껏 기계학습을 했는데, 그 결과를 저장하지 않으면 아무런 소용이 없습니다. 그래서 이번 포스팅에서는 그 저장하는 폴더를 지정하기 위해서 이래저래 코드와 씨름을 하는 과정을 한번 올려보고자 합니다.



먼저 위 스크린샷에서 보이는 것처럼, 저장할 폴더라는 버튼을 누르면, 해당하는 메소드가 실행이 되도록 일단 코드를 만들어 주도록 합니다.



그리고 나서 QFileDialog.getExistingDirectory()라는 메소드를 이용해서 실제로 존재하는 폴더를 선택하도록 만들어 주도록 합니다. 그리고 나서 다음으로는 Checking_Save_Folder()라는 메소드도 만들어 보도록 합니다.



당연하다면 당연하게 여기서도 앞에서 만든 데이터 베이스 파일을 지정하는 것과 같이, 폴더의 경로를 표시해 주는 lineEdit_4에서 텍스트가 바뀌면, 이렇게 메소드가 작동을 하도록 만들어 주고 있습니다.



실제로 프로그램을 실행 시켜서, 폴더를 지정해 주면, 표식까지 제대로 나오는 것을 볼 수 있습니다. 이렇게 해서 일차적인 작업은 마무리가 된 듯 합니다.




그 다음에는 강화 학습 시작이라는 메소드의 버튼을 누르고 나서, 위 스크린샷에서 나오는 것처럼 코드를 짜서, 하나라도 조건이 충족되지 않으면 경고 박스가 뜨도록 디자인을 바꾸어 주도록 합니다.



그 다음에는 원래 RLTrader에 있던 정책 신경망을 파일로 저장이라는 항목을 그대로 가지고 오도록 합니다. 여기다가 당연하다면 당연하게 model_dir에서 원래는 기본적으로 셋팅이 되어 있던 항목을 제가 지정한 폴더의 위치로 바꾸도록 만들어 주도록 합니다.



다음은 policy_learner.py로 가서, 위 스크린샷에서 나와 있는 것처럼 from main import MainWindow라는 형식으로 바꾸어 주도록 합니다. 다른 방법도 시도를 해 보았지만, 결국 가서는 from py파일이름 import 클래스 이름 이라는 형식으로 지정을 해야 제대로 된 import가 가능했습니다.



그리고 나서 policy_learner.py에 있는 위 스크린샷처럼 가시화 결과를 저장할 폴더도 있는데, 여기도 역시 MainWinow라고 하는 main.py에 있는 클래스 변수를 가지고 오도록 합니다. 한가지 신기한 것은 여기서는 self를 붙이지 않아도 가능하다는 것 입니다.




그리고 나서 진짜로 학습이 진행이 되는 지를 살펴보기 위해서 일단 에포크의 숫자를 10만으로 줄여 봅니다. 이건 어디까지나 제대로 움직이는 지 아닌지 알아보기 위한 과정이기 때문에 이런 과정을 하는 것 입니다.



그런데 위 스크린샷과 같은 에러가 뜨는데, 이게 무슨 에러인가 싶은 생각이 듭니다.



결국 하다하다 python의 작동이 중지되는 것을 볼 수 있는데, 어디가 어떤 문제인지는 잘 모르겠습니다. 다만 하나 알 수 있는 것은 하나 있는게, 또 다시 골치 아픈 일이 시작이 되었다는 것 입니다. 아무튼 다음 포스팅에서는 이 오류를 해결하기 위한 과정에 들어간 다고 보시면 될듯 합니다.

  1. Jet 2019.06.15 19:07

    policy_learner 에서 from main import MainWindow 를 사용하셧는데
    저도 똑같이 해보았을때 ImportError: cannot import name 'MainWindow' from 'main' 이런 에러가 나옵니다..
    그리고 ImportError: cannot import name 'PolicyLearner' from 'policy_learner' 이런 에러가 나오는데 어덯게 해결하셧는지 도저히 이해가 안가서 질문드립니다

    • 일이 있어서 답글이 늦어졌습니다.
      일단 저렇게 임포트가 안될 경우에는 속 편하게 from (py파일이름) import *
      이렇게 해서 py파일에서 모든걸 가지고 와라는 의미가 있으며, 일일히 클래스 명을 입력하지 않아도 되기는 됩니다.

  2. jet 2019.06.17 11:01

    from (py이름) import * 을 사용해서 불러오기는 완료 하였으나 여전히 같은 오류가 발생합니다 ..
    필자 분 께서는 from (py이름) import * 이 코드로 성공하셨나요?

    • 안녕하세요?
      혹시 가지고 오고자 하는 py파일에 if__name__ = '__main__':
      이 있는지요?
      이게 의미가 최종적인 실행자로 실행이 되겠다는 의미가 있어서 다른데 import가 안되도록 막습니다.
      제 경우에는 이런적도 있었습니다.

  3. Jet 2019.06.17 20:17

    네 있습니다 그렇다면 가지고 오고자 하는 파일이 main 이라느 파일이라고 가정했을때 if__name__ 이 구문이 빠진 새로운 mains라는 파일을 만들어서 import하면 가능할수도 있는건가요?

    • 안녕하세요?
      예 가능은 합니다. 다만, 왜 main을 가지고 오시려고 하시는지는 모르겠습니다만, 이 if__name__이라는 구문은 파이참에서는 실행에 꼭 필요한 것으로 보입니다.
      그래서 일단 import로는 처리할 수 없었습니다.
      일단 제가 잘못 알고 있는건지는 모르겠지만, 저 if__name__이 있으면 안되었고, 제 경우에는 '''''''이라고 작은 따옴표 6개로 특정 줄에서 특정 줄까지 주석처리를 하는 것으로 처리를 했었습니다.
      다른 파일을 만들어서 수정해도 import는 가능하리라 생각합니다.

  4. Jet 2019.06.17 21:17

    위의 포스팅에서 마지막에서 두번째 이미지처럼 import 에러 나오는건 어덯게 해결하셧는지 알수있을까요?

+ Recent posts