분석 Python/Tensorflow(42)
-
tensorflow, keras) 정형 데이터를 이용하여 모델 만들기
목차 umap에서 ParametricUMAP 을 사용하기 위해서는 keras 모델을 만들어야 하는데, 정형데이터를 임베딩해서 적용해보고 싶어서, 테스트를 하는 도중에 나온 결과물을 정리한다. 결론적으로 현재(22/01/08)는 umap에서 dict 데이터 타입을 지원하지 않고, 오로지 array 형태로만 가능하기 때문에, 사용할수가 없었다. 데이터를 one-hot으로 해서 하는 방법이 있겠지만, 차원 축소를 할 때 임베딩도 차원 축소할 때 학습시키고자 했기 때문에 좀 더 라이브러리가 개선되면 그때 다시 시도해봐야겠다. 아니면 일부 코드를 뜯어내서 수정하거나... 이러한 예시는 tensorflow에서 더 잘되어 있긴 하지만, 간단하게 구현해놔서 정리만 해둔다. 라이브러리 호출 import pandas as..
2022.01.08 -
[Keras] EarlyStopping 및 Model 저장하기
리마인드 한다는 개념으로 해보고 있다. torch를 하다가 keras를 하니까 좀 편한 것 같기도 하다 ㅎㅎㅎ from keras.callbacks import EarlyStopping from keras.callbacks import ModelCheckpoint 아래와 같이 EarlyStopping과 ModelCheckpoint를 어떤 것을 모니터링할지를 설정한다. es = EarlyStopping(monitor='accuracy', mode='max', verbose=1, patience=500) mc = ModelCheckpoint('best_model.h5', monitor='accuracy', mode='max', save_best_only=True) 모델을 어떻게든 원하는대로 만든다. 이때 c..
2020.11.21 -
[Keras] Weighted Cross Entropy 적용하는 방법
keras에서 weighted binary crossentropy를 적용할 때 방법을 공유하고자 한다. 바로 sklearn의 class_weight를 활용하는 것이다. from sklearn.utils import class_weight weights = class_weight.compute_class_weight('balanced', np.unique(train_y), train_y) weights = {i : weights[i] for i in range(2)} weights ## {0: 0.6254180602006689, 1: 2.493333333333333} class_weight에 어떻게 보면 고정된 weight를 주는 방법이다. 더 나은 방법은 아마도 batch_size마다 weight를 계산..
2020.11.21 -
Mixture Density NeuralNetwork 예제
아시다시피 실제 데이터에는 잡음이 있다. 상당히 짜증스럽기는 하지만, 그러한 잡음은 데이터의 기원에 대한 더 넓은 시야를 제공하기 때문에 의미가 있다. 타겟 값은 인풋에 따라서 잡음의 정도가 다를 수 있기 때문이다. 그리고 그것은 데이터를 이해하는 데 있어서 주요한 영향을 끼친다. $$f(x)= x^2 -6x+9$$ 위와 같은 함수가 잇다고 하자. 위의 함수는 determinsitc output $f(x)$를 가진다. 그러나 실제 데이터에서는 잡음이 생길 수 있는데, 여기서는 x 가 커질수록 잡음이 더 증가한다고 하자 그러면 아래와 같은 그림을 가질 것이다 $$g(x) = f(x) + \epsilon(x)$$ import numpy as np import pandas as pd import seaborn..
2020.05.21 -
tf.layers.dense 알아보기 (tf.tensordot ,tf.matmul)
주로 나는 tensorflow를 사용하는 유저이다. 그래서 보통 fully connected layer를 사용할 때 필자는 weight와 bias를 다 지정하고 곱하고 더하는 식으로 한다. w = tf.get_variable("w" , [in_dim,out_dim]) b = tf.get_variable("b" , [out_dim]) logit = tf.matmul(x,w)+b 왜냐하면 좀 더 weight에 특정한 짓(spectral norm) 같은 것을 구현하려면 high level api인 tf.layers.dense를 사용하면 안 되기 때문이다. 그래서 이번에 어쩌다 3 dimension을 다르고 있는데, 신기하게 tf.layers.dense가 작동하는 것을 확인하였고, 내부에서 어떻게 돌아가는지 확..
2020.04.24 -
Learning from Multimodal Target 리뷰 (MDN)(Tensorflow)
광고 한 번씩 눌러주세요! 블로그 운영에 큰 힘이 됩니다 :) 드디어 Mixture Density Neural Network 관련 코드를 찾았다. 필자는 혼합 분포 뉴럴 네트워크에 대한 것을 알고 싶었는데, 찾고 싶을 때는 죽어도 안 나오더니, 우연찮게 글을 찾게 되어 읽어보고 실습을 해보고 나중에 어떻게 써먹을지 생각을 해봐야겠다. 필자는 개인적으로 기대하는 방향은 VAE 같은 곳에 단순 가우시안으로 계산하는 방법이 아닌 Mixture density를 latent space에서 배우게 하고 싶다. 물론 실제로 그런 loss 함수 부분을 정의하는 방법도 또 찾아봐야겠지만, 이미 누군가는 다 해놨을 거라고 생각하고 열심히 찾아볼 계획이다. :) Introduction 모델 평가를 위해 예측하고 불확실성을 ..
2020.04.19 -
tf.py_func 사용해보기
광고 한 번씩 눌러주세요! 블로그 운영에 큰 힘이 됩니다 :) tensorflow graph 내에 파이썬 연산을 해줄 수 있는 tf.py_func 만약 데이터가 크다면, 전체를 읽지 못하고 배치성으로 데이터를 읽어서 해야하는데, 그럴 때 그래프내에서 할 수 있기 때문에 괜찮다고 생각함. (사실 텐서플로우 그래프 밖에서 해도 될 것 같긴 함.) Tensorflow에 python_func 사용해보기 import tensorflow as tf import numpy as np from sklearn.preprocessing import MinMaxScaler X = tf.placeholder(tf.float32 , (None , 3), name ="X") def numpy_use(x) : result = x-..
2020.04.17 -
tf.data 삽질해보기 (two iterator, feed_dict, GAN)
텐서플로우를 사용하면서 기존에는 feed_dict 방식을 사용했는데, tf.data를 사용 시 여러 가지 장점이 있는 것 같아서 만들 때마다 사용하는 것 같다. 실제로 모델링까지 해본 것은 다른 글에 있으니 눌러서 확인해보시면 될 것 같다(https://data-newbie.tistory.com/441) 필자는 GAN을 할 때 시도를 해봤는데, 먼가 코드에서 꼬이는 현상이 발생했다. 지금도 완벽히 해결하지 못했지만, 여러 가지 삽질을 해보면서 얻은 것을 공유해보고자 한다. 1. tf.data 2개의 iterator 생성해보기 일단 GAN을 학습 시 보통 다음과 같이 한다. for _ in range(10) : #### while True : sess.run([dloss, doptimizer]) sess...
2020.04.08 -
tf.data로 데이터 파이프라인 만들고 추론하는 것 까지 해보기
광고 한번만 눌러주세요 ㅎㅎ 블로그 운영에 큰 힘이 됩니다. 예전에 tf.data로 인풋 파이프라인을 만들고, 모델을 만든 뒤, 모델을 저장해서 사용해봤는데, 추론 결과가 계속 동일한 이상한 현상이 발견했다. 그래서 오랜만에 tf.data도 다시 공부하고 모델 학습 후 저장한 것을 다른 스크립트에서 돌릴 때 어떻게 했는지에 대해서 공유한다. 일단은 정확한 답은 아닐 수 있지만, 충분히 사용할만할 것 같다고 생각한다. 일단 중요한 것은 데이터 처리 이후니까 전처리 단계는 가볍게 패스 개인적으로 initializer를 사용하는 것을 선호한다. tf.data에서는 batch_size를 정해줘야하는데, 이 부분을 빈 홀더로 남겨놓고, 전체 추론할 때는 바꾸면서 사용할 수 있게 했다. import tensorfl..
2020.03.22 -
Tensorflow에서 tf.data 사용하는 방법
tf.data에 데이터를 넣는 방법는 방법은 4가지 정도 있는 것 같다. Data Loading 1. numpy에서 불러오기 # create a random vector of shape (100,2) x = np.random.sample((100,2)) # make a dataset from a numpy array dataset = tf.data.Dataset.from_tensor_slices(x) ## features, labels = (np.random.sample((100,2)), np.random.sample((100,1))) dataset = tf.data.Dataset.from_tensor_slices((features,labels)) 2. tensor에서 불러오기 dataset = tf.d..
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