본문 바로가기

Deep Learning/Keras & Tensorflow

TF 버전 별 재현성 잡는 방법 정리 이전 글에 정리한 것처럼 재현성 잡힌 결과를 얻고 싶다면 Tensorflow-Determinism을 다운받아 사용해주면 된다. UpSampling의 Interpolation 이슈만 제외하고 나머지는 거의 다 재현성이 잡혀서 원하는 결과를 얻을 수 있다. TF 1.14.0 버전을 사용하던 나는 1년 동안 아무 문제 없이 잘 사용하고 있었는데... 최근 들어서 또 다시 재현성의 늪에 빠지게 됐다. TF 2.1 이상은 tf-deteminism이 지원을 안 하네..? 말 그대로다. 회사 서버 업데이트를 하게 돼서 TF 2.5 버전을 사용하게 됐는데 tf-determinism이 해당 버전은 지원 안 한다는 에러 문구가 뜨더라. 그러면서 TF 2.8부터는 tf-determinism을 따로 설치할 필요 없이 간단한 .. 더보기
Loss weight, Class weight, Sample weight 케라스로 모델을 설계한 다음, 학습시키는 과정에서 적용할 수 있는 weight의 종류는 크게 3개이다. Loss weight model.compile( )에서 "loss_weights" 파라미터를 통해 넣어줄 수 있다. 모델에 2개 이상의 loss functin이 걸리는 경우 사용할 수 있는 파라미터이다. (EX) model.compile(optimizer='adam', loss=['binary_crossentropy', 'mse'], loss_weights=[2, 1]) Class weight 클래스 불균형을 해결하기 위한 방법으로 샘플 수가 상대적으로 적은 Class 쪽에 가중치를 부여하는 방식이 있다. model.fit( )이나 model.fit_generator( )의 "class_weight" .. 더보기
How to get reproducible results with Keras (or Tensorflow) ? You can use Tensorflow-Determinism. Check this Link. Line 5 and 6 are important to set reprocibility of Keras. import os import random import numpy as np import tensorflow as tf from tfdeterminism import patch patch() random_seed = 7 os.environ["PYTHONHASHSEED"] = "0" os.environ['TF_DETERMINISTIC_OPS'] = '1' os.environ['TF_CUDNN_DETERMINISTIC'] = '1' np.random.seed(random_seed) random.seed(rando.. 더보기
Generative Adversarial Network (GAN) 설계 시 고려할 부분 GAN은 Generator와 Discriminator가 서로 경쟁하며 학습이 진행되는 network 구조라서 어느 하나의 성능이 낮으면 한 쪽으로 훅 치우치는 경향이 있다. Optimizer와 Learning rate에 따른 성능 차이도 꽤 심하게 나타난다. GAN에서 개인적으로 가장 곤란한 게 성능이 안 나와서 train loss든 train accuracy든 들여다봐도 뭐가 문제인지 해석하기 어렵다는 점이다. 이럴 땐 우선 Discriminator의 복잡도를 올려보자. 더보기
ImgaeDataGenerator.flow_from_directory을 이용해 이미지 증식하는 방법 Data augmentation은 Network의 robustness를 높이기 위해 거의 default로 적용하는 방법이다. 케라스에서는 ImageDataGenerator 클래스의 몇 가지 클래스 함수들로 이미지 로드 뿐만 아니라 augmentation을 지원한다. flow( ) flow_from_directory( ) flow_from_dataframe( ) 이번 글에선 flow_from_directory( ) 함수를 사용해서 augmentation을 하는 방법에 대해 정리하고자 한다. 그러기 위해선 일단 사용할 이미지가 필요하다. 저작권 문제에서 자유로운 https://pixabay.com/ 에서 마음에 드는 고양이와 강아지 사진을 각각 2장씩 골라 아래와 같은 폴더 구조로 저장하자. 여기서 이렇게 .. 더보기
keras.models.Model( ) 케라스에서 모델 설계를 할 때 Sequential( )을 주로 사용해왔다. 단순히 이전 layer의 output이 다음 layer의 input으로 들어가는 선형적인 경우에 사용해주면 아주 편리하기 때문이다. 그래서 단점도 존재한다. DenseNet( ) 같이 선형적 흐름이 아닌 모델 설계의 경우엔 사용하질 못 한다. keras.models.Model( )을 사용하면 Sequential( )의 불편한 점에서 벗어날 수 있다. 이 놈은 Multi Input / Multi Output을 지원한다. 위와 같은 흐름을 갖는 모델을 설계하고 싶다면 Model( )을 사용해주면 된다. import keras from keras.layers import Input, Embedding, LSTM, Dense from k.. 더보기
MNIST 분류 모델, 조금 다르게 실행해보자 / get_tensor_by_name( ) 일단 코드부터 보자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 import tensorflow ass tf from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets('./mnist', one_hot = True) X = tf.placeholder(tf.float32, (None, 28,28,1), name = 'INPUT') Y = tf.placeholder(tf.float32, (None, 10)) is_training = tf.pla.. 더보기
RNN과 CNN 동시 사용 모델(RCNN / CRNN)의 개념 및 구현 RCNN 개념과 CNN 개념을 하나로 연결해서 설계된 모델이 있다. 연결 순서에 따라 아래와 같이 나뉜다. Convolutional Recurrent Neural Network (CRNN) Recurrent Convolutional Neural Network (RCNN) 1. CRNN CNN을 연산을 먼저 한 뒤에 각 채널을 나눠서 RNN에 입력하는 구조이다. CNN을 통해 Feature를 추출하고, 이를 RNN으로 분류하는 흐름이라 생각하면 된다. [ An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition ] 2. RCNN 여러 conv연산이.. 더보기