디버그

    [Pytorch] lovely-tensors 라이브러리

    [Pytorch] lovely-tensors 라이브러리

    Introduction 파이토치를 사용하는 코드를 디버그 하다 보면 텐서 정보를 출력해 봐야 할 때가 있다. 인풋 / 아웃풋 텐서 이미지라던지, 중간 activation 결과라던지, 아니면 하다못해 모델 웨이트라던지 다양한 텐서 데이터에 대해 지금 어떤 값을 가지고 있고, 비주얼라이즈 하면 어떤 모습일지 확인해 봐야 하는 상황이 종종 있을 것이다. 하지만 일반적으로 텐서를 출력하면 보이는 모습은 아래와 크게 다르지 않다. >>> tensor tensor([[[[ 0.4419, 0.8523, -0.5494, ..., -0.8664, -0.5186, 0.1264], [ 0.2430, -0.7320, -0.7026, ..., 0.4742, -0.7101, 0.6129], [-0.2232, -0.9372, 0...

    [Anaconda] Powershell에서 아나콘다 가상환경 활성화가 안 되는 문제 해결하기

    [Anaconda] Powershell에서 아나콘다 가상환경 활성화가 안 되는 문제 해결하기

    Introduction 파워쉘에서 아나콘다 환경을 사용하고 싶어 가상환경을 만들었는데, 만들기까지는 정상적으로 되지만 activate는 안 되는 요상한 현상을 발견했다. 결론부터 말하면 윈도우 계정 이름이 한글로 되어있어 아나콘다를 통한 파워쉘 프로파일 생성 도중 유니코드 경로가 깨지는 현상이 발생하는 것이였고, 이로 인해 파워쉘이 프로파일 위치를 제대로 찾지 못 해 문제가 생기는 것이었다. 프로파일의 경로를 제대로 수정해 주면 문제를 해결할 수 있다. Solution 먼저 파워쉘을 관리자 모드로 실행시켜 주자. 파워쉘에서 아나콘다를 사용하려면 아래 명령어를 실행시켜 주어야 한다. $ conda init powershell 그러면 위와 같은 아웃풋이 출력되는데, 잘 실행된 것 같지만 마지막 줄의 프로파일..

    [Python] Error parsing XML: not well-formed (invalid token) 에러 해결

    [Python] Error parsing XML: not well-formed (invalid token) 에러 해결

    Introduction 파이썬에서 XML 파일을 자동으로 생성한 후, xmltodict 나 ElementTree 를 사용해 다시 XML 파일을 파싱하려고 할 때 다음과 같은 에러가 발생하는 경우가 있다. Error parsing XML: not well-formed (invalid token) 사용하는 도구에 따라 XML 파일의 어느 위치가 잘못 되었는지 알려 주기도 하기 때문에 vim과 같은 에디터를 열어 해당 위치 내용을 직접 수정해도 되지만, 파일이 크고 수정해야 하는 지점이 많으면 이 방법을 사용하기엔 여의치 않다. 이번 글에서는 파이썬을 이용해 해당 문제를 편하게 해결하는 방법을 소개한다. Problem 위 문제의 원인은 크게 두 가지로 나눌 수 있다. XML 파일 내부에 XML 문서에서 처음부..

    [Python] PEP 8: E731 do not assign a lambda expression, use a def

    [Python] PEP 8: E731 do not assign a lambda expression, use a def

    Introduction 파이썬에는 lambda expression (람다 표현식) 이라는 기능이 있다. 파이썬 코드를 자주 보는 사람들은 모두 한 번쯤은 람다 표현식을 써 봤거나 남이 쓰는 것을 본 적이 있을 것이다. 그런데 PEP 8 (참고) 규약을 기반으로 하는 정적 분석기 (ex. pycodestyle) 나 코드 오토포매터 (ex. autopep8) 를 사용하는 경우, 해당 도구들은 변수에 대입되는 람다 표현식을 목격하기만 하면 경고 메시지를 출력하거나 알아서 같은 기능을 하는 함수 정의로 대체해 버리는 것을 볼 수 있다. # autopep8의 format on save를 켜 둔 상태로 Ctrl + S를 누르면.. sample_lambda_expression = lambda x: x**2 # 이렇게..

    [Utilities] libpng warning: iCCP: known incorrect sRGB profile

    [Utilities] libpng warning: iCCP: known incorrect sRGB profile

    Introduction 학습에 이미지 데이터를 사용하다 보면 libpng warning: iCCP: known incorrect sRGB profile 라는 메시지가 콘솔 창에 출력될 때가 있다. Error가 아닌 warning이기도 하고, 뭔가 에러가 레이즈 되어 프로세스가 멈추는 것도 아니지만 데이터를 훑을 때마다 반복적으로 메시지가 출력되니 콘솔 창이 난잡해진다. 특히 tqdm으로 프로세스 진행 상황을 트래킹하고 있다면 더더욱 문제를 뜯어고치고 싶을 것이다. 그래서 이번엔 이 메시지가 무슨 의미를 가지며, 어떻게 해결할 수 있는지 알아보려고 한다. 위 메시지는 libpng 라이브러리에서 발생시키는 메시지로,이미지 내에 유효하지 않은 iCCP (iCC Profile) chunk가 존재할 때 발생한다...

    [Python] Logger 사용법

    [Python] Logger 사용법

    Introduction The Hitchhiker's Guide to Python 이란 책에는 다음과 같은 구절이 등장한다. The only time that print is a better option than logging is when the goal is to display a help statement for a command line application. Shell과 같은 커맨드 인터페이스에서 --help 옵션을 받아 사용법 도움말을 출력할 때 이외에는 항상 logging이 print보다 낫다는 뜻으로, 사실상 웬만한 상황에서는 print 대신 logging을 사용하는 것이 낫다는 의미이다. 그 이유로는 아래와 같은 내용을 들고 있다. The log record, which is create..

    [OpenCV] cv2.fillPoly 도중 Segmentation fault + gdb 사용법

    [OpenCV] cv2.fillPoly 도중 Segmentation fault + gdb 사용법

    Introduction 얼마 전 모델 학습을 돌리다가 시작 후 3~4일쯤 지나서 Segmentation fault (core dumped) 라는 메시지와 함께 아무 에러 트레이스백 없이 프로세스가 종료되는 현상이 반복적으로 발생했다. 따로 디버거를 활성화 시켜 놓고 돌리지도 않았고, 무엇보다도 학습 시작 후 한참 이후에 아무 정보 없이 프로세스가 종료되니 디버그를 도저히 진행할 수가 없었다. 그런데 어느날, 학습 시작 후 몇 분만에 에러가 재현되는 학습 세팅을 발견해 비로소 디버그 작업에 착수할 수 있었다. 빠르게 제목의 상황의 해결법을 보고 싶다면 우측 목차를 통해 문제 해결 단락으로 넘어가자! 삽질의 과정 파이썬 스크립트 실행 도중 Segmentation fault 에러가 발생할 때 파이썬 디버거 (..

    [Python] 프로파일링 (profiling)

    [Python] 프로파일링 (profiling)

    Introduction 파이썬 코드를 작성하다 보면 성능 최적화를 위해 코드의 실행 시간을 정확히 측정하고 싶을 때가 있다. 물론 아래와 같이 time 모듈을 이용해 시간 성능 저하가 예상되는 일부 코드 블럭의 실행 시간을 직접 측정해 볼 수 있지만, 요소별로 실행 시간을 측정하기가 불편하고, 무엇보다도 파이썬의 동적인 특성으로 인해 예상되는 지연 구간과 실제 지연이 일어나는 부분이 다를 수 있다는 문제가 있다. from time import time from math import sin, cos, pi def projectile_landing_position(velocity, angle, g_constant): """ XY평면 (0,0) 좌표에서 X축 기준 angle(deg,