본문 바로가기

Study52

컴퓨터와 가위바위보 하기 1 컴퓨터와 '가위 바위 보' 게임을 해보기로 했다. 컴퓨터와 게임을 하기 위해 프로그램을 만들어본다. 간단하게 한판 하는 프로그램 간단하게 '가위 바위 보' 게임을 한판만 하는 프로그램을 제작해보자. 이 경우 게임의 진행순서는 대략 다음과 같을 것이다. 사용자에게 '가위, 바위, 보' 중 하나의 입력을 받는다. 컴퓨터도 세 개의 값 중 하나를 고른다. 사용자가 고른 값과 컴퓨터가 고른 값을 비교하여 승, 패 여부를 확인한다. 사용자에게 결과를 출력한다. 사용자로부터 입력받기 사용자에게 가위, 바위, 보를 선택하게 하는 방법은 여러 가지가 있다. 버튼을 만들어 하나를 선택하게 할 수도 있고, 키보드로 입력을 받을 수도 있으며, 음성 혹은 카메라로 입력을 받는 방법도.. 2021. 8. 12.
python argparse를 사용하여 커맨드 라인 인자 처리하기 python을 notebook형식이 아닌 .py 파이썬 파일 형식으로 커맨드상에서 실행하는 경우들이 존재한다. 이 경우 프로그램 실행 시에 커맨드 라인상에서 인자를 전달해야 하는 경우가 있다. 예를 들어 아래와 같이 커맨드에서 실행하도록 한다고 해보자. python train.py resnet 또는 더 많은 인자를 주어서 아래 처럼 실행하는 것도 가능하다고 하자. python train.py resnet --epochs 777 --batch-size 64 --epoches, --batch-size는 타이핑하기 길기 때문에 -e, -b로 짧게 인자를 넘기는 것도 가능하게 하고 싶다. python train.py resnet -e 777 -b 64 위처럼 작동하게 하고 싶다면, 커맨드 라인 (command .. 2021. 8. 4.
python functools.partial 사용 partial을 사용하여 인자가 여러 개인 함수에 몇 개의 인자가 이미 설정되어있는 새로운 함수를 생성할 수 있다. 그런데 언제 필요할까? multiprocessing.Pool의 map()은 함수를 인자로 받는다. 그 함수는 인자가 하나여야 한다. 하필 내가 사용해야 하는 함수는 인자를 여러 개를 받는데, map()에서 실행하는 경우 인자 중 하나를 제외하고 계속 동일한 값이 들어가는 경우라면? partial을 이용하면 그 하나의 인자를 제외한 나머지 인자들을 고정한 함수를 만들 수 있다. 이 방법으로 새로운 함수는 인자를 하나만 받게 하여 map()에서 사용할 수 있도록 한다. partial의 간단한 사용법 사용법이 매우 간단하다. from functools import partial 아래 두 수를 곱.. 2021. 7. 22.
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.