본문 바로가기

반응형

분류 전체보기

(369)
Pytorch - backward(retain_graph=True) (2) Pytorch - backward(retain_graph=True) (1) 일반적으로 손실 함수 (loss function)을 계산할 때는 배치에 대하여 평균/합 등을 통해 스칼라 값을 만들어준 이후에 .backward() 함수를 적용합니다. 스칼라 로스에 대한 각 파라미터 별 기울기를 계산하고 최적화를 수행하죠. 하지만 출력 $y$가 스칼라가 아닌 다변수 벡터 $y=$인 경우에는 .backward() 함수를 어떻게 적용할 수 있을까요? Pytorch에서는 JVP (Jacobian Vector Product)를 계산하여 최종 loss에 대한 파라미터 기울기를 계산합니다. 먼저 입력 벡터 $x=$, 출력 벡터 $y=$에 대해서 Figure 1과 같은 Jacobian matrix를 구성할 수 있습니다. 이 ..
List Subtraction 두 개의 리스트 $x, y$가 있을 때 $x$ 리스트 원소 중 $y$ 리스트에 속한 원소를 제거하고 싶습니다. 예를 들면 다음과 같은 빼기 연산 (-)를 수행하고 싶은겁니다. >>> x = [1,2,3,4,5,6,7,8,9,0] >>> x [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] >>> y = [1,3,5,7,9] >>> y [1, 3, 5, 7, 9] >>> x - y # (should return [2,4,6,8,0]) 하지만 리스트 자료구조에 대해서는 빼기 연산 (-)를 지원하지 않으므로 다음과 같은 에러가 발생합니다. Traceback (most recent call last): File "", line 1, in TypeError: unsupported operand type(s)..
Onehot 인코딩의 역변환 (inverse transform) 범주형 데이터 (categorical data)를 수치화하는 방법은 대표적으로 1) 0부터 범주 개수까지 범위의 숫자를 할당하는 nominal 인코딩 (Label encoding), 2) 각 범주마다 1의 값을 가지는 dummy variable을 생성하는 onehot 인코딩 방법이 있습니다. (물론 다른 방법들도 있습니다.) 특히, one-hot 인코딩은 Pandas의 get_dummies 함수를 이용해서 쉽게 수행할 수 있었는데요, 이 함수를 사용할 경우 inverse_transform 함수가 정의되어 있는 scikit-learn 함수와는 달리 변환 이후에 원래 데이터 양식으로 역변환 함수를 따로 만들어줘야 합니다. 다음과 같은 데이터프레임이 있다고 가정했을 때 get_dummies 함수를 이용하면 p..
파이썬의 GIL 사용 이유 파이썬 구현체 CPython의 GIL (Global Interpreter Lock)은 파이썬 바이트코드를 실행할 때, 여러 쓰레드 중 하나의 쓰레드만이 파이썬 객체에 접근할 수 있게 하는 mutex (mutual exclusive) 로서 하나의 프로세스의 공유 리소스를 하나의 쓰레드만이 점유하게 하는 장치입니다. 따라서 파일 읽기/쓰기, 네트워크 통신 등과 같은 I/O 작업이 아닌 행렬연산, 이미지처리 등 CPU를 많이 사용하는 작업에 대해서는 파이썬의 멀티쓰레드로는 성능향상을 기대할 수 없는데요, 다음 코드를 보면 다중쓰레드가 락 (mutex)의 획득, 해제에 따른 오버헤드로 인해 실행 시간이 더 길게됩니다. # single_threaded.py import time from threading impo..
구글 애드센스 PIN 번호 우편물 수령 후기 개인 공부 겸 블로그를 2021년 2월 말부터 시작한 지 벌써 5달이 지났네요. 4월 경에 애드센스 광고 게재 심사를 통과하고 2달이 지나 누적 수익금이 10달러를 돌파하니 다음과 같은 메일이 날아왔습니다. 애드센스 정책으로 수익금을 지급하기 전에 PIN 번호를 따로 입력해야 한다더군요. 오매불망 기다리기를 3주가 넘어가고 주소가 잘못됐을까 몇 번이나 확인해도 오지 않아 PIN 번호 재발송을 신청하려던 찰나 만 4주가 되기 직전 다음 우편이 도착했습니다. 우편물을 열어보니 PIN 번호 등록 절차와 6자리 PIN 번호가 있었습니다. 애드센스에 접속해 "청구소 수신 주소 확인" 블락을 클릭하고, PIN 번호 6자리를 입력하면, 올바르게 제출되었습니다라는 메세지가 보이면서 무난히 완료했습니다. 완료 이후 로그..
용역계약 선금 신청 공사나 용역을 발주받으면 원활한 현금흐름을 위해 계약 발주처에 선금 지급을 요청할 수 있습니다. 선금신청 조건으로는 1) 계약금액이 3천만 원 이상인 공사 또는 물품 제조 계약과 5백만 원 이상인 용역계약이고, 2) 계약 잔여이행기간이 선금지급 신청일을 기준으로 30일을 초과하지 않아야 합니다. 요청가능한 선금 액수 또한 계약 크기에 따라 다른데요, 물품의 제조 및 용역 기준으로는 다음과 같습니다. 계약금액 선금액 10억원 이상 30% 까지 3억원 이상 10억원 미만 40% 까지 3억원 미만 50% 까지 신청서류 당연하게도 선금을 지급받기 위해서는 서류들이 필요합니다. 계약 체결때와는 달리 나라장터를 통할 필요는 없고 다음 서류들을 구비해 계약처에 송부하면 됩니다. 선금신청공문 공문은 공무원 및 공공기관..
Decorator 에서 함수 디폴트 인자 파악 방법 데코레이터는 자신이 감싸고 있는 함수가 호출되기 전과 후에 코드를 추가로 실행하는 파이썬의 문법으로 여러 함수에 대해 동일한 기능을 수행시키고 싶을 때 주로 사용합니다. 다음 코드와 같이 장식할 함수를 인자로 받아 wrapper 함수에서 인자로 받은 함수를 수행하고 wrapper 함수가 반환되므로 sample 함수 호출 시 전달한 인자는 wrapper 함수의 인자 *args, **kwargs가 됩니다. def trace(func): def wrapper(*args, **kwargs): result = func(*args, **kwargs) print(f'{func.__name__}') print(f'Arguments: {args!r}, Keywords: {kwargs!r}', end = '') retur..
namedtuple 인스턴스 확인 collections 내장모듈의 namedtuple은 tuple의 불변성과 클래스의 속성접근 특성을 합친 많이 쓰이는 파이썬의 자료구조입니다. 다음과 같이 issubclass 내장함수를 사용하면 namedtuple로 선언한 클래스가 tuple의 자식클래스임을 알 수 있습니다. >>> Point = namedtuple('Point', ['x' 'y']) >>> pt = Point([1,2]) >>> issubclass(Point, tuple) True 그렇다면 우리가 다루는 인스턴스가 namedtuple 자료구조로부터 왔는지 어떻게 확인할 수 있을까요? 먼저 type 함수를 통해 pt 인스턴스의 타입을 살펴보면 namedtuple로 선언한 클래스 이름이 나옵니다. 하지만 우리는 클래스 이름을 모르는 상황을..

반응형