ML
-
[tensorflow 2.0] optimizer learning rate schedule데이터분석 2019. 12. 9. 23:15
섬세한 모형 튜닝을 위해서는 learning rate를 조금씩 줄여주는 작업이 필요하다. 특정 iteration마다 optimizer instance를 새로 생성해줘도 되지만, tensorflow에서는 optimizer의 learning rate scheduling이 가능하다. 가장 많이 쓰이는 ExponentialDecay는 계속 같은 비율로 learning rate를 감소시켜준다. 사용 예시는 아래와 같다. initial_learning_rate = 0.1 lr_schedule = keras.optimizers.schedules.ExponentialDecay( initial_learning_rate, decay_steps=100000, decay_rate=0.96, staircase=True) opt..
-
[tensorflow 2.0] tf.pad데이터분석 2019. 12. 2. 01:12
이미지 전처리 중 shape 통일을 위해서 원본 이미지에 zero-padding을 해야할 경우가 있다. 그 때 손쉽게 패팅하는 방법이 tf.pad이다. tf.pad( tensor, paddings, mode='CONSTANT', constant_values=0, name=None ) 사용 방법은 padding만 신경쓰면 어렵지 않다. padding은 shape이 D x 2인 텐서이며, [D, 0]은 D차원(rank) 앞의 패딩 [D, 1]은 D차원 뒤의 패딩을 의미한다. 예를 들어, input tensor의 Shape이 (Batch_size, height, width, channel) 라면, 다음과 같이 height와 width에만 padding을 추가할 수 있다. padding = [[0, 0], [6..
-
A Gift from Knowledge Distillation: Fast Optimization, Network Minimization and Transfer Learningpaper review 2019. 11. 18. 19:16
논문을 review하기 전에 Knowledge Distillation의 시초가 되는 논문을 먼저 간단히 소개하고자 합니다. Knowledge Distillation 개념은 Teacher Network의 성능을 작은 Student Network에 담기위해 고안됐습니다. 처음 논문은 Teacher Network의 softmax 결과를 "soft label"로 정의하고, Student Network가 원래의 hard label과 soft label을 모두 학습하는 방식을 제안했습니다. 이번에 review하는 논문은 처음 논문과 최신 논문의 중간 단계입니다. 본 논문에서는 좀 더 효과적인 Knowledge Distillation 방법론을 제안합니다. 본 방법의 장점은 아래와 같다고 합니다. Optimized를 ..
-
[Tensorflow 2.0] custom gradient 함수로 reverse gradient 구현하기데이터분석 2019. 11. 7. 20:15
Adversarial Network를 학습하기 위해서는 gradient를 반전해야 할 때가 있다. 그런 경우 Tensorflow 2.x에서는 custom gradient 함수를 정의하여 구현할 수 있다. 일단 공식 가이드의 custom gradient 예시를 보자. # custom gradient sample @tf.custom_gradient def log1pexp(x): e = tf.exp(x) def grad(dy): return dy * (1 - 1 / (1 + e)) return tf.math.log(1 + e), grad 먼저 @tf.custom_gradient 데코레이터를 사용한다. 그리고 정의하는 함수 내부에서 input 처리 및 gradient를 return하는 함수를 정의해서 다시 반환..
-
[tensorflow 2.0] tf.slice데이터분석 2019. 11. 1. 22:50
tf.slice( input_, begin, size, name=None ) tf.slice는 python list slice의 함수 형태로 이해하면 된다. input_: 원본 input tensor begin: 시작 위치 size: 잘라낼 size (shape) # 예제 tensor t = tf.constant([[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]], [[5, 5, 5], [6, 6, 6]]]) # 원본 t에서 시작위치 [1, 0, 0]은 [3, 3, 3] 리스트의 맨 앞 [3] 이다. # 시작 위치에서 [1, 1, 3] shape으로 내용물을 꺼내오면, # 총 1*1*3 개의 원소가 차례대로 선택되고 # 그 결과는 [[[3, 3, 3]]] 이 된다. tf..
-
python으로 구현한 간이 단변량분석 fineclassing신용평가 2019. 10. 18. 20:45
신용평가 등의 데이터 분석 시, fineclassing 단변량 분석을 진행한다. fineclassing을 통해 개별 항목의 분포를 확인하고, target과의 관계를 빠르게 살펴볼 수 있기 때문이다. 최근 분석에서 활용한 간이 fineclassing 코드는 다음과 같다. 급하게 만들어서 깔끔하지는 않지만 충분히 실무에서도 쓸 수 있을 것이다. Args: df: 분석데이터 col: 컬럼명 tgt: target 컬럼명, 해당 컬럼은 0/1 binary 형식이어야 함 nbins: 숫자형 변수의 구간수, 숫자만큼 percentile을 계산해서 컬럼 분포를 확인 Return: 요약 결과 DataFrame을 반환 사용 코드: from pandas.api.types import is_string_dtype import..
-
배열 3차원 이상 곱셈데이터분석 2019. 10. 16. 20:55
데이터 프레임워크를 사용하다보면 곱셈시 배열 차원(shape)이 매번 헷깔린다. 그래서 정리를 해보았다. 01. 2차원 곱셈 일단 기본 numpy 행렬곱으로 shape 특성을 이해해본다. 아래 예시에서 확인할 수 있듯이, 2차원의 행렬에서 shape은 (행, 열)을 의미한다. 이 상태에서는 크게 어려울 것이 없다. import numpy as np a = np.array([[1, 0], [0, 1], [1, 1]]) print(a.shape) # (3, 2) b = np.array([[4, 1], [2, 2]]) print(b.shape) # (2, 2) np.matmul(a, b) #array([[4, 1], # [2, 2], # [6, 3]]) 02. 3차원 이상 곱셈 여기서부터 매번 헷깔리기 시작한..
-
sklearn, numpy를 활용한 데이터 차원축소데이터분석 2019. 10. 15. 19:13
가용 변수가 너무 많은 경우 데이터분석 패키지들을 이용해 데이터 차원축소를 진행합니다. 데이터 차원축소는 두 가지 방법이 있습니다. 먼저 변수선택을 통해 차원을 축소할 수 있고, 또 다른 방법은 더 작은 차원으로 특성들을 이동하는 것입니다. 01. PCA (주성분분석) n차원의 데이터 공간에서 가장 분산이 큰 방향의 k차원으로 이동(mapping)합니다(단, n>k). 분산이 큰 방향은 데이터 scale에 민감하므로, PCA를 적용하기 전 표준화 작업이 선행돼야 합니다. PCA의 pseudo code는 아래와 같습니다. 원본 데이터를 표준화합니다. 표준화 또는 정규화된 데이터의 공분산 행렬을 생성합니다. 공분산 행렬에서 고유 벡터(eigenvector)와 고윳값(eigenvalue)을 계산합니다. 고윳값..