Lab-07-3-1 application and tips
<학습 내용>
- Data sets
- Training / Validation / Testing
- Evaluating a hypothesis
- Anomaly Detection
- Learning
- Online vs Batch
- Fine tuning
- Efficient Models
<Data sets>
모델 만드는 과정에서 데이터 구성이 가장 중요!
모델 만들 때 훈련과 평가를 거침.
데이터 구성을 왼쪽처럼 / 오른쪽처럼.
왼쪽: 평가할 때 학습에 없는 얼굴들이 들어감. => 제대로 된 평가 할 수 없게 됨!
오른쪽: 평가를 통해 해당하는 얼굴이 있었는지 판별 가능해진다.
데이터 구성은 우측 이미지처럼 잘 구성해야 한다!
학습을 위한 데이터와 평가를 위한 데이터를 잘 고른 후 모델의 성능을 높이는 작업을 해야한다.
데이터 바탕으로 여러 레이어를 만들어서 네트워크를 만든 후 모델을 구축할 수 있고, learning rate를 통해 구축할수도 있다. 동일 데이터를 가지고 hyper parameter와 네트워크 layer 구조를 바꾸어 가면서 반복적으로 학습하면서 최적의 값으로 99%의 적합한 모델을 찾는 것이 목표이다.
# [Tensorflow Code]
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data() # 60,000 training / 10,000 testing images
model.fit(x_train, y_train, validation_split=0.2, epoch=5) # 20% Val data
텐서플로우 상에서도 처음 접하는 mnist 데이터가 쉽게 모델을 만들 수 있도록
학습 데이터와 테스트 데이터를 구분했고, 모델 상에서 데이터를 알아서 수치를 줘서 적절한 평가 데이터를 구분해내는 과정을 제공해준다.
layer, learning rate, optimizer 등을 잘 구축하여 데이터에 fit하는 과정을 거치고 model을 선택하게 되면, 새로운 테스트 데이터를 넣어 테스트 하게 된다. 예를 들어 동일 인물이 선글라스를 쓰고/벗은 사진, 다른 각도의 사진들 등의 새로운 데이터를 통해 실제 모델을 검증하는 과정이 중요하다.
# [Tensorflow Code]
test_acc = accuracy_fn(softmax_fn(x_test), y_test) # define hypothesis (x) and test (y)
model.evaluate(x_test, y_test) # Keras
모델을 만드는 과정에서 학습을 위한 데이터와 평가 데이터를 통해 모델을 만든다.
그러나 이상 감지의 경우에는 새로운 방식을 사용한다.
건강한 데이터만을 가지고 모델을 만든다. 이 경우 건강한 데이터에 대해서만 모델 적용이 가능하다.
따라서 특이한 데이터가 모델에 왔을 때와 같은 상황에서 이를 잘 감지할 수 있는 방법이 최근 많이 나왔다.
<학습하는 실제 사례>
Online - 지속적으로 데이터가 들어오면서 학습하면서 변함
Batch - (=Offline learning): 데이터가 정적인 상태에서 learning 수행
Learning의 다른 방법들
<Fine Tuning / Feature Extraction>
ex. 기존의 얼굴을 구분하는 모델에 황인 / 흑인 / 백인에 대한 데이터를 넣어 기존의 w 값을 조절하는 방법.
ex. 기존 모델에서 새로운 task에 대해서만 학습을 시키는 방법.
# [Tensorflow Code]
saver = tf.train.import_meta_graph('my-model-1000.meta') # 모델 가져옴
saver.restore(tf.train.latest_checkpoint('./')) # 새로 저장
궁극적으로, 효과적인 모델을 만드는 것이 중요!
백 명의 사람에 백 대의 카메라가 있다면 연산량은 100 * 100 = 10000
-> inference 시간을 줄이는게 중요하고, inference에 큰 영향을 미치는 모델의 weight를 경량화 하는 것 중요!
-> 이를 1 * 1로 대체하는 기법(Squeezenet, Mobilenet)들이 있다. (차원 줄이기)
# [Tensorflow Code]
tf.nn.depthwise_con2d(input, filter, strides, padding) # Tensorflow 또한 경량화하는 라이브러리 제공
출처: https://youtu.be/sWUJ8UhwMx8
이미지 출처: http://bit.ly/2LQMKvk