TensorFlow(45)
-
텐서플로우에서 범주형 데이터 다루기
광고 한 번씩 눌러주세요! 블로그 운영에 큰 힘이 됩니다 :) 보통 딥러닝 프레임워크로 모델을 만드는 경우, 데이터를 다 준비하고 넣는 경우가 가장 쉽다. 그래서 범주형 데이터를 처리하게 되면, 보통 원핫 인코딩을 통해 sparse data를 만든다. 이게 보통 적은 데이터에서는 전혀 문제가 되지 않지만, 만약 데이터가 커지면 커질수록 모델 분석보다, 전처리하는데 많은 시간이 소요하게 된다. 뿐만 아니라 sparse data를 만들게 되면, 그만큼 메모리도 많이 잡아먹기 때문에, 범주에 따른 메모리 변동량이 커지게 된다. data Preprocessing time memory issue 그래서 필자는 이러한 부분에 대해서 해소해보고자 텐서플로우 그래프에서 처리하는 방법으로 해봤다. 아무래도 텐서플로우에서..
2020.04.05 -
Permutation importance 을 사용하여 딥러닝 모델 해석하기 (정형 데이터)
광고 한번만 눌러주세요 ㅎㅎ 블로그 운영에 큰 힘이 됩니다. 모델을 해석하는 방법에는 다양한 방법이 있고, 그중에 많은 패키지는 model-agnostic 한 방법으로 학습된 모델을 사후 해석하는 방향으로 해석을 합니다. 그래서 이번 글에서는 그러한 방법론 중 Permutation을 이용하여 변수 중요도를 구하는 방법을 소개하겠습니다. 여기서 사용하고 있는 많이들 알고 있는 Tensorflow를 사용하여 Neural Network를 기반 아키텍처에 대한 변수에 대한 중요도를 보이고자 합니다. 아래 그림 처름 주어진 데이터에 각 변수마다 Permutation을 통해 다양하게 섞습니다. 그리고 Permutation을 하였을 때, 결괏값의 Loss가 커질 경우, 그 변수는 중요한 변수라는 것을 의미합니다. 일..
2020.03.26 -
tf.data로 데이터 파이프라인 만들고 추론하는 것 까지 해보기
광고 한번만 눌러주세요 ㅎㅎ 블로그 운영에 큰 힘이 됩니다. 예전에 tf.data로 인풋 파이프라인을 만들고, 모델을 만든 뒤, 모델을 저장해서 사용해봤는데, 추론 결과가 계속 동일한 이상한 현상이 발견했다. 그래서 오랜만에 tf.data도 다시 공부하고 모델 학습 후 저장한 것을 다른 스크립트에서 돌릴 때 어떻게 했는지에 대해서 공유한다. 일단은 정확한 답은 아닐 수 있지만, 충분히 사용할만할 것 같다고 생각한다. 일단 중요한 것은 데이터 처리 이후니까 전처리 단계는 가볍게 패스 개인적으로 initializer를 사용하는 것을 선호한다. tf.data에서는 batch_size를 정해줘야하는데, 이 부분을 빈 홀더로 남겨놓고, 전체 추론할 때는 바꾸면서 사용할 수 있게 했다. import tensorfl..
2020.03.22 -
tf.stop_gradient 사용해서 학습시킬 가중치 조절해보기
광고 한번만 눌러주세요 ㅎㅎ 블로그 운영에 큰 힘이 됩니다. 하고 싶은 것은 아래 그림과 같다. 일단 인풋에서 Target1을 맞추는 Network1을 만든다. 그리고 Loss를 정하고, Optimizer를 설정한다. 그리고 Output1을 가지고 다시 Network2를 통해 Output2를 만든다. 그리고 Target2와 비교한다. 이때 내가 하고 싶은 것은 Output1을 학습할 때는 Network1의 파라미터만 학습을 시키고 싶고, Output2를 도출할 때는 앞에 Network1을 freezing 시키고 나서, Network2의 Parameter만 학습시키고 싶다. 그래서 찾은 방법은 tf.stop_gradient였다. https://scelesticsiva.github.io/2018/01/22/..
2020.03.21 -
Shared Weight AutoEncoder 구현해보기
광고 한 번씩 눌러주세요. 블로그 운영에 큰 힘이 됩니다 :) 아래는 AutoEncoder의 구조를 나타냈다. AutoEncoder는 기본적으로 encoder르 차원 축소 후 decoder로 다시 원래대로 복원할 수 있게 하여 학습시킨다. 원래 기존 구조는 w1, w2, w3, w4 weight를 각각 만들어서 다시 X를 복원한다. 하지만 이런 구조에서 생각해보면 굳이 w3, w4가 필요하지 않다. 네트워크의 목적은 다시 X를 복원하는 것이므로 최적화하는 파라미터의 수를 줄이기 위해서 w1 , w2를 transpose를 통해서 구할 수 있다. 네트워크 구조는 아래와 같다. 이런 식의 구조를 활용하면 parameter의 수를 줄여서 더 빠르게 학습시킬 수 있을 것이라고 했던 것 같다. 암튼 나는 개인적으로..
2020.02.24 -
[ Tensorflow ] AUC 구하기
광고 한 번씩 눌러주세요. 블로그 운영에 큰 힘이 됩니다 :) import tensorflow as tf import numpy as np a= np.random.uniform(size=(10,2)) prob = a / np.expand_dims(np.sum(a,axis =1 ),axis =1) prob target = np.random.randint(low=0, high =2 , size=10) target = np.argmax(prob , axis = 1) probs = tf.constant(prob) labels = tf.constant(target) proba = tf.slice(probs,[0,1],[-1,1]) auc_value , update_auc = tf.metrics.auc(tf.res..
2020.02.21 -
Tensorflow Version 1 tune 간단 예제
광고 한 번만 눌러주세요 블로그 운영에 큰 힘이 됩니다! :) 최근에 optuna를 쓰다가 먼가 cpu를 잘 안 쓰는 것 같아서 다른 것을 고민하다가 tune을 발견했다. https://towardsdatascience.com/fast-hyperparameter-tuning-at-scale-d428223b081c Tune: a Python library for fast hyperparameter tuning at any scale How do you tune hyperparameters with thousands of cores in just 18 lines of code? towardsdatascience.com 일단 표 자체에서는 search algorithms 과 fault tolerance 차이밖..
2020.02.02 -
Tensorflow Projector 사용하기
word2 vec을 들어본 사람이라면 아래 그림과 같은 예제를 많이 보게 될 것이다. word2 vec을 사용하면 단어를 특정 공간에 투영시켜놓는다 그리고 이게 잘 학습이 된다면 단어들이 의미 있는 공간에 투영되게 된다. 그래서 아래 그림에서 보면 성별을 기준으로 같은 방향으로 움직이면 다른 성별에 관련된 단어와 연관이 있다는 것을 알 수 있게 된다. 이런 식으로 sparse representation(one-hot)에서 dense representation(distributed representation)으로 변하게 할 수 있다. 이렇게 하면 기존의 n 차원에서 더 작은 m 차원으로 줄여줄 수가 있게 돼서 차원의 저주라는 문제에 대해서 어느 정도 해소시켜줄 수 있다. 그뿐만 아니라 일반화 능력도 가질 ..
2020.01.26 -
[ Python ] tensorflow에서 결측치(na)를 특정값으로 대체하기
보통 데이터에는 결측치가 존재한다. 이러한 결측을 처리하는 데에 있어서 보통은 먼저 결측을 처리하고 들어간다. 만약 이러한 값에 대해서 tensorflow에서 처리를 하려면 다음과 같이하면 된다. 하지만 이 방법은 특정값으로 대체만 가능하다. matrix마다 다르게 결측 값을 넣는 것은 좀 더 알아봐야 할 것 같지만, numpy나 pandas를 쓰는 게 더 편하긴 할 것 같다. import os , numpy as np import tensorflow as tf data = np.random.normal( size= (5,2)) missingidx = np.random.randint(0,2, size=(5,2)) data[missingidx == 1] = np.nan 위에 처럼 결측이 저렇게 있는 데이터..
2020.01.12 -
tf.scan, tf.less , tf.assign , projector, tf.dtypes
## tensorflow InteractiveSession , get_shape, expand_dims, linspace import tensorflow as tf sess = tf.InteractiveSession() c = tf.linspace(0.0 ,4.0, 5) print(c.get_shape()) d = tf.expand_dims(c, 1) print(d.get_shape()) print(c.eval()) sess.close() tf.Graph , dtype with tf.Graph().as_default() : c1 = tf.constant(4, dtype=tf.float32 , name= "float") c2 = tf.constant(4, dtype=tf.float64 , name= "fl..
2020.01.05 -
Tensorflow 1.x Tabular Data Neural Network Modeling
도움이 되셨다면 광고 한번만 눌러주세요! 블로그 운영에 큰 힘이 됩니다! : ) tabular data에 tensor flow 적용하기. 코드에서 눈여겨 봐야할 점 missing value mean 처리 selu activation + alpha dropout boosting algorithm idea 비슷하게 흉내내기(틀린 것을 더 학습시키는 구조) Weighted Cross-Entropy (compute class weight) Weight L2 Regularization category 데이터를 onehot을 하지 않고 label encoding 한 후 embedding 또는 onehot으로 처리함. label smoothing 적용 alpha = 0.95 y_one_hot = tf.add(alph..
2020.01.04 -
Tensorflow Adanet Tabular Data 적용해보기
https://medium.com/neuronio/introduction-to-adanet-c01fad8b084 Introduction to AdaNet AdaNet (Adaptive Structural Learning of Artificial Neural Networks) was announced by Google in its blog as a new AutoML framework. It is… medium.com AdaNet은 앙상블 개념을 사용한다. 마지막 모델은 위의 그럼처럼 단순한 것들의 결합으로 이루어진다. 대단한 점은 이러한 것을 앙상블을 만들기 위해 각 iteration에서 후보 네트워크의 세트를 체크하고 더 작게 만드는 loss를 찾게 되면 앙상블에 더하는 구조를 만들어 준다는 것이다. ..
2019.12.29