본문 바로가기

반응형

분류 전체보기

(369)
[영어 표현] improve on / own up to / make up It's OK to make mistakes as long as you learn somethong after each one. 실수는 그때그때 배우는 것만 있다면 해도 괜찮다. If you think about it, that's actually how you become better at something and maybe even perfect, if there is such a thing. 생각해보면 바로 그런 식으로 해서 무엇을 더 잘하게 되고 심지어 완벽해지는 것이다. 완벽한 것이 존재한다면. I'm implying that there is no such thing as perfect. Personally, I really admire people who openly face their own..
Sparse Matrix (희소행렬) 구현하기 행렬 곱하기는 행렬 크기가 클수록 많은 연산량이 소요됩니다. 만약 행렬에 0이 대부분이고 0이 아닌 요소가 (non-zero elements) 매우 적은 경우 0은 곱연산에 의미가 없으므로 일반적인 행렬 곱연산은 비효율적이겠죠. 이럴때 효율적으로 행렬 곱을 수행할 수 있는 방법은 sparse matrix (희소행렬) 형태로 행렬을 재구성하는 것입니다. 희소행렬은 0이 아닌 요소에 대해서만 (행 인덱스, 열 인덱스, 값)을 가진 형태로 0이 아닌 요소만 저장하고 불필요한 0인 요소는 따로 저장하지 않습니다. Scipy 라이브러리의 sparse matrix 모듈에 관련 함수들이 구현되어 있고 이번 포스트에서는 raw한 파이썬으로 구현해보도록 하겠습니다. Data structure 먼저 희소행렬을 구성하기 위..
KMeans 알고리즘 구현하기 KMeans는 대표적인 군집화 알고리즘으로 간단한 특성으로 인해 온사이트 인터뷰나 코딩 테스트에서 스크래치부터 구현해보라는 문제가 가끔씩 출제됩니다. 이번 포스트에서는 scikit-learn, numpy 같은 외부 라이브러리 없이 파이썬의 내장 함수와 라이브러리만으로 KMeans 알고리즘을 구현해보도록 하겠습니다. 군집화할 데이터는 10000개의 16차원 벡터라 가정하면 16개의 실수 요소를 가진 리스트 10000개를 요소로 가진 리스트가 됩니다. Utility functions Euclidean distance Distance metric으로 Euclidean distance를 계산하는 함수를 구현합니다. 입력으로 같은 길이의 리스트 2개를 받고 각 요소 별 차이의 제곱을 모두 더한 후 math 라이브..
[문법] during / while / as During / While: 어떤 것을 하는 도중에~ During 뒤로는 명사, while 뒤로는 완성된 문장 (혹은 ~ing 형식의 동명사) 문장 속에서 활용되는 방식이 다를 뿐 의미는 비슷 I fell asleep during the movie. 영화를 보다가 잠들었어. Did you notice anything strange during your conversation with her? 그녀와 대화를 하다가 이상한 점을 느꼈나요? No. I didn't notice anything strange during our conversation. 아니오. 그녀와 대화를 하면서 이상한 점은 못 느꼈어요. The pacakge was damaged during shipment. 상품은 배송중에 파손됐다. Do..
Temporal Convolutional Network (TCN) Transformer 모델이 등장하기 전에는 자연어처리, 시계열 데이터 처리 등에는 RNN의 LSTM/GRU 모델이 압도적으로 많이 사용되었습니다. 그 와중에서 convolution의 locality를 잡는 특성과 dilation을 이용해 receptive field를 넓힌 WaveNet의 등장 이후 1차원 convolution을 시퀀스 데이터에 적용하려는 시도가 많이 있었는데요, 이번 포스트에서 알아볼 내용은 다양한 시퀀스 벤치마크 데이터셋에 대해서 LSTM/GRU에 비해 높은 성능을 보인 TCN (Temporal Convolutional Network) 모델입니다. Temporal convolutional network Causal convolutions 먼저 시퀀스 모델링을 입력 시퀀스 $x_0, ..
Property, Setter, Getter 다른 언어를 사용하다 보면 클래스의 attribute를 위한 getter, setter 메소드를 명시적으로 정의하는 경우가 많습니다. 하지만 이런 코드는 파이썬답지 않고 필드 값을 증가시키는 연산 등의 경우에는 이런 메서드를 사용하면 코드가 지저분해지게 됩니다. (e.g. r0.set_ohms(r0.get_ohms() - 40)) class OldResistor: def __init__(self, ohms): self._ohms = ohms def get_ohms(self): return self._ohms def set_ohms(self, ohms): self._ohms = ohms r0 = OldResistor(50) print(f'Before: {r0.get_ohms()}') r0.set_ohms(..
concurrent.futures를 이용한 병렬화 매우 많은 연산량을 요구하는 파이썬 프로그램에 대해서는 병렬화 없이 결국 성능의 벽에 부딪치게 됩니다. 멀티 스레드를 사용하고자 하더라도 파이썬의 GIL (Global Interpreter Lock)으로 인해 파이썬 스레드는 진정한 병렬 실행이 불가능하므로 하나의 계산을 여러 작업으로 나누는 작업은 파이썬에서는 불필요합니다. 그렇다면 성능에 결정적인 영향을 미치는 부분을 하부 기계에 가까운 C 언어를 사용한 확장 모듈로 작성할 수 있겠지만 여러 부분을 C 언어로 바꾸어야 해서 많은 비용이 들고 포팅하는 과정에서 무수히 많은 버그가 발생할 수 있습니다. 파이썬에서 진정한 병렬화를 통해 속도 향상을 시키기 위해서는 파이썬 3.2 버젼부터 생성된 concurrent.futures 모듈의 multiprocess..
데코레이터와 functools.wrap 파이썬은 함수에 적용할 수 있는 데코레이터 (decorator)를 정의하는 특별한 구문을 제공하는데, 데코레이터는 자신이 감싸고 있는 함수가 호출되기 전과 후에 코드를 추가로 실행합니다. 이는 데코레이터가 자신이 감싸고 있는 함수의 입력 인자, 반환 값, 함수에서 발생한 오류에 접근할 수 있다는 뜻으로 함수의 의미를 강화하거나 디버깅, 함수를 등록하는 등의 일에 유용하게 사용할 수 있습니다. 예를 들어 함수가 호출될 때마다 인자 값과 반환 값을 출력하고 싶을때 다음과 같은 "trace" 라는 데코레이터를 정의할 수 있습니다. def trace(func): def wrapper(*args, **kwargs): result = func(*args, **kwargs) print(f'{func.__name__}..

반응형