Keras로 모델을 만들어 Progbar를 이용해 accuracy, loss, precision 등을 출력하고 진행상황을 보게 되는데 나의 경우 vscode에서 계속 new-line으로 update되는 현상이 발생하였다.
하지만 이렇게 batch 마다 update가 되면 터미널에 너무 많은 내용이 찍어서 각 Epoch 당 경향을 console에서 파악하기 어렵기 때문에, 나는 각 batch 마다의 update는 한 줄에서 지워지면서 실시간으로 보여지기만 하고, 터미널에 남는 내용은 epoch 마다 남게 하고 싶었다.
이는 설치된 keras 폴더의 utils 라는 곳에 들어가면 generic_utils.py 라는 파일이 있다.
나의 경우는 아나콘다 환경에서 가상환경을 만들어 거기에 keras를 설치했기 때문에 경로가
~/Anaconda/envs/test/lib/python3.6/site-packages/keras/utils
이와 같았다. 경로는 설치된 곳마다 다르니 위의 경로를 보고 어디쯤 있겠거니 참고만 하고, 절대 같은 경로는 아니라는 것을 주의해야 한다.
또한 나처럼 아나콘다 가상 환경을 사용한다면, 사용하는 아나콘다 가상 환경 디렉토리(여기서는 test) 안에서의 site-packages에 들어가야 한다. 각 가상환경마다 site-packages가 있으므로, 사용하는 가상환경이 아닌 곳을 바꾸면 엉뚱한 곳을 바꾸는 것이다.
여기서
위의 self._dynamic_display를 위의 그림처럼 코드를 작성해준다. 위의 3줄을 주석처리 해주고, _dynamic_display의 값을 True로 설정해준다.
이것이 어떻게 코드줄바꿈을 하지 않게 해주는지는 코드 아래를 찾아보면 나와있다.
같은 코드에서 아래부분인데, self._dynamic_display의 값이 Ture이면 터미널에 sys.stdout.write('\r')을 출력한다. 기능은 아래와 같다.
하지만 위의 sys.stdout.write('\r')은 cmd에서 사용하거나 spyder에서는 정상작동하나, Visual Studio 2017에서는 줄바꿈을 하게 된다. 이는 버그로 보인다고 위키독스에 나와있다. 나는 VSCode 2019인데도 버그가 난다. 물론 가끔씩 같은 라인으로 출력되었다가 갑자기 새로운 라인으로 출력되거나 한다. 버그라는 것이 맞는 설명인 것 같다.
나도 우분투 터미널에서는 정상적으로 같은 라인으로 출력되는데 vscode에서는 새로운 라인으로 출력되서 계속 찾아보다가, 이 문서를 발견하고 버그라는 것을 알았다. 따라서 vscode에서 작동이 안된다고 해도 터미널에서는 정상 작동 가능하니 터미널에서 작동해보길 바란다. 또한 vscode는 머신러닝 학습을 돌리면서 파일이 너무 많아지면 잘 불러오지 못하거나 학습이 터져버리는 경우가 있기 때문에, 학습을 제대로 돌릴때는 터미널에서 돌리는 것이 더 좋은 것 같다!
출처: https://wikidocs.net/14660
'딥러닝 프레임워크 > Keras' 카테고리의 다른 글
Keras data generator; StopIteration (0) | 2019.11.13 |
---|