본문 바로가기

분류 전체보기63

Matplotlib로 subplot을 생성하고, 겹치지 않게 하기 matplotlib를 사용하면서 subplot을 만들어야 하는 상황이 생긴다. subplot(), add_subplot(), subplots() 이 세 개의 함수은 subplot을 만드는데 쓰인다. 사용법의 차이를 알아보기 위하여 아래 x로부터 생성된 y1, y2, y3를 각기 다른 방법으로 subplot에 그려보았다. import numpy as np import matplotlib.pyplot as plt x = np.arange(0,5,0.1) y1 = np.cos(x) y2 = np.exp(x) y3 = y1 * y2 plt.plot(x,y1) plt.show() plt.plot(x,y2) plt.show() plt.plot(x,y3) plt.show() Subplot 만들기 pyplot.subp.. 2021. 7. 17.
공공 데이터 포털에서 "공휴일" 정보 받기 공휴일을 모아놓은 데이터가 필요할 때가 있다. 어떤 데이터에 날짜가 포함되어있는데 우리가 예측하려는 값이 휴일과 관계가 있을지도 모르기 때문이다. 공공 데이터 포털에서는 공휴일 정보를 받을 수 있는 api도 제공하고 있다. 이 api를 사용해 보자. API 사용 전 준비 회원가입 Api를 사용하기 전, 공공데이터 포털에서 회원가입을 하여야 한다. 공공데이터 포털 우측 상단에 회원가입 버튼을 눌러 회원가입부터 진행해 주자. 활용신청 Api 활용신청을 해주자. 우리가 사용할 데이터는 한국 천문연구원의 특일정보 데이터이다. 데이터 검색화면에 특일로 검색하여 특일정보 데이터의 활용신청을 해주자. 검색 검색결과 활용신청 활용 신청 후 승인이 되었다면 마이페이지 > 개발계정에서 다음과 같은 화면을 볼 수 있다. 여.. 2021. 7. 15.
Python opencv로 좌표 형태의 도형을 mask 이미지 배열로 변환, 또 역으로 Computer vision과 관련된 AI 경진대회들 중에서는 이미지에서 특정 물체를 분리해야 하는 과제를 주는 대회들이 존재한다. 이때, '어떤 물체가 어디에 존재한다'라는 정보를 mask 이미지로 주는 대회가 있는가 하면 영역을 다각형으로 표현하여 이 다각형의 좌표로 제공하는 대회가 있다. Segmentation 모델의 대부분은 mask 이미지를 받고, 또 mask 이미지의 형태로 결과를 반환한다. 다각형 좌표로 제공받았다면, 이를 mask 이미지로 변환하는 과정이 필요하다. 이 과정에 대하여 알아보자. import numpy as np import cv2 import matplotlib.pyplot as plt 좌표 형태의 도형을 mask배열로 만들기 opencv에 이미 관련 기능이 구현이 되어있다.. 2021. 7. 13.
Python에서 이미지 채널 BGR 에서 RGB로 변환하기 어느 날 사용할 예제 사진이 없어 전역 후 처음 먹었던 싸이 버거를 찍은 사진을 예제 사진으로 쓰기로 했었다. 평소보다도 더 환상적으로 맛있었던 그 싸이 버거를 추억하기 위해 cv2.imread()로 불러와 plt.imshow()를 이용하여 출력하였더니... 입맛을 떨어지게 하여 다이어트에 효과적이라는 파란색 음식 사진을 볼 수 있었다. 이 글에선 BGR 이미지를 RGB 이미지로 변경해 본다. import numpy as np import matplotlib.pyplot as plt import cv2 from pathlib import Path imgpath = Path('.') / 'img.jpg' img = cv2.imread(str(imgpath)) plt.imshow(img) 이미지를 불러오는 .. 2021. 7. 3.
numpy 배열의 생성과 조작 dnumpy 사용을 위하여 import를 해준다. import numpy as np numpy 배열 생성 np.array np.array 에 list를 넘겨주어 numpy 배열의 생성이 가능하다. np.array([1,3,5,7,9]) array([1, 3, 5, 7, 9]) np.ndarray ndarray에 원하는 shape로 생성이 가능하다. np.ndarray((3,4)) array([[6.95174279e-310, 7.89754161e-312, 7.89754160e-312, 4.94065646e-324], [8.32219288e-315, 0.00000000e+000, 0.00000000e+000, 7.41098469e-323], [4.00752607e+175, 6.89912841e-310, 0... 2021. 6. 22.
Python pathlib.Path로 경로관리하기 얼마전 노트북을 새로 구매하였다. 이전 노트북은 debian 운영체제를 사용하고 있었다. 그래서 개인적으로 간단하게 만드는 파이썬 프로그램들에는 별 생각 없이 슬래시(/)가 포함된 경로를 그대로 넣었었다. 이 프로그램들은 경로를 구분하는 데에 역슬래시를 사용하는 윈도우 프로그램에선 정상적으로 작동하지 않는다. os.path.join을 사용해서 처리하려다가 경로를 문자열이 아닌 객체로 처리하는 pathlib.Path에 대해 알게되었다. Path를 이용해서 경로를 처리하는 법 import from pathlib import Path Path 객체 생성 p = Path('.') p2 = Path('.','folder2') 시스템에 따라서 PosixPath, WindowsPath중 하나로 생성이 된다. 경로 연.. 2021. 6. 10.
Pytorch의 Reproducibility를 위한 설정들 같은 학습 데이터로 학습을 하고, 동일한 테스트 데이터로 테스트를 하였음에도 매번 실행해보면 모델의 학습 파라미터와 테스트 결과가 동일하지 않은 경우가 많다. 이는, 높은 수준의 재생산성(Reproducibility)을 요구하는 대회나 업무에 지장을 줄 수 있다. 이 글에선 Pytorch를 사용할 때 최대한 Reproducibility를 유지할 수 있는 방법에 대해 적어보았다. Seed 고정 난수 생성기의 seed를 고정하면, 매번 프로그램을 실행할 때마다 생성되는 난수들의 수열이 같게 할 수 있다. 그래서 pytorch와 관련 라이브러리에서 사용되는 난수 관련 seed를 고정하여야 한다. pytorch_lightning에선 pytorch와 관련된 난수 생성기의 seed를 고정하는 코드가 있다. 그 코드.. 2021. 6. 9.
구글 애드센스 승인 후기 코딩하면서 기억이 잘 안 날 때 다시 보면 유용할 것 같은 것들과 내가 했던 몇 가지 뻘짓들을 적는 블로그여서 포스팅 주기도 길지 않았고, 내용이 많은 블로그도 아니었다. 그래도 되면 좋고 안되면 말고 하는 생각으로 애드센스 승인 신청을 넣었었다. 그리고 신청 3일 후 메일 한통이 날아왔다. 블로그에 광고를 게재할 수 있게 되었다. 신청 당시에 글이 많은 것도 아니었다. 그렇다고 포스팅 당 글자 수가 많은 것도 아니었다. 그럼에도 너무 쉽게 통과가 되어서 당황스러웠다. 같은 주제로 글을 올렸던 것이 도움이 되었던 것일까? 무엇이 애드센스를 승인하는 알고리즘의 마음을 사로잡았는지는 모르겠지만, 통과가 되어 기분이 나쁘진 않았다. 하지만, 난 이 블로그에서 수익이 많을 것이라 생각하지 않는다. 앞에서 말했듯.. 2021. 6. 9.
Python multiprocessing.Pool 멀티프로세싱 2 Python에선 multiprocessing.Pool을 이용하여 멀티프로세싱을 할 수 있다. Process를 활용할 때는 우리가 직접 Process를 만들어서 그 Process위에서 작업을 돌렸다면, Pool은 지정된 개수만큼 프로세스를 미리 만들어 놓고, 그 프로세스들 위에서 작업을 돌리는 방식이다. Pool 사용하기 from multiprocessing import Pool if __name__ == '__main__': p = Pool(4) # do something here with Pool # blabla # blablabla p.close() # or p.terminate() p.join() 생성 처음 Pool을 생성할 때에 사용될 프로세스 수를 지정할 수 있다. 만약, 주어지지 않는다면 os.. 2021. 6. 7.
Python multiprocessing.Process 멀티프로세싱 1 파이썬에서 멀티프로세싱을 이용하여 여러 작업을 동시에 처리할 수 있다. multiprocessing의 Process를 사용하여 이를 간단히 구현할 수 있다. Process 사용 아래 코드는 Process를 사용하는 가장 간단한 방법이다. from multiprocessing import Process def func(string): print(string) if __name__ == "__main__": proc = Process(target=func,args=('process',)) proc.start() process Process의 서브클래스를 만들어 사용할 수도 있다. 이때, 반드시 run() 메서드를 오버 라이딩해주자. from multiprocessing import Process class .. 2021. 6. 3.