Deep learning/Studying 15

RESTFUL API 작성

[ REST API 설계 규칙 ] - URI는 정보의 자원을 표현해야함 ( 리소스 명은 동사보다 명사를 사용) - 자원에 대한 행위는 HTTP METHOD(GET, POST, PUT, DELETE )로 표현 - 관계명이 복잡하다면 이를 서브 리소스에 표현 -> 예를 들어 사용자가 좋아하는 디바이스 목록을 표현해야할 경우 GET : /users/{userid}/likes/devices (관계명이 애매하거나 구체적 표현이 필요할 때) - 컬렉션은 문서들의 집합, 객체들의 집합을 나타냄 (단/복수도 지켜준다면 좀 더 이해하기 쉬운 URI를 설계할 수 있음) sports라는 컬렉션과 soccer이라는 도큐먼트로 표현하고 있음 컬렉션은 sports로 복수로 나타내고 있음 /sports/soccer/players/..

Ensemble - hard vote , soft vote

Voting - 다른 알고리즘 model을 조합해서 사용 - 서로 다른 알고리즘이 도출해낸 결과물에 대해 최종 투표하는 방식을 통해 최종 결과를 선택 1. hard vote : 결과물에 대한최종값을 투표 ex) 분류를 예측한 값이 1, 0, 0, 1, 1 이었다고 하면 1이 3표 0이 2표를 받았기 때문에 Hard voting 에서는 1이 최종값으로 예측함. 2. soft vote : 최종 결과물이 나올 확률값을 다 더해서 최종 결과물에 대한 각각의 확률을 구하여 최종값 도출. soft vote가 hard vote 보다 더 합리적이라는 것이 대세 ex) class 0이 나올 확률이 (0.4, 0.9, 0.9, 0.4, 0.4) 이었고 class 1이 나올 확률이 (0.6, 0.1, 0.1, 0.6, 0...

Tensorflow 2.0 prediction model.predict vs model( .. , training =False) 차이

서버에서 도커 열고 도커이미지로 컨테이너 생성해서 안에있는 이미지들을 예측하는 프로세스다. 근데 도커를 여는데에만 약 15초가 걸리고 모델 로드는 약 4초가 걸렸다. 왼쪽은 각 배치 수행시간 오른쪽은 누적 수행시간이다. 여기서 문제는 첫번째 배치의 수행시간이 첫번째사진에서는 약 78초 오른쪽 사진에서는 약 4초가 걸린다. 첫번째 배치를 열어줄때는 model.predict코드를 보면 make_predict_fucnction()코드 때문에 시간이 오래 걸릴 수 있지만 마지막 배치의 경우 어떠한 이유때문에 수행시간의 차이가 있는지 더 찾아봐야 할 것 같다. 1) model.predict(X) ouput을 numpy로 변환 2) model(X, training = False) ouput을 텐서플로 객체 그대로 ..

Random Initialization이 필요한 이유

사전에 학습된 네트워크를 사용하려면, 내가 가지고있는 새로운 데이터셋에 사용할 수 있는 네트워크의 구조적 제약이 있다. 예를 들면 사전에 학습된 네트워크로 부터 컨볼루션 레이어를 내 마음대로 제거할 수 없지만, 몇몇 변화들은 할 수 있다. 파라미터를 공유하고 있는 특성 때문에 다른 공간에서의 사이즈로된 이미지에 대해서 사전의 학습된 네트워크를 쉽게 돌릴 수 있다. Convolutional Net의 weight들은 상대적으로 이미 좋은 상태이고, 그 위에 있는 새로운 선형 분류기는 랜덤 초기화로 부터 학습이 되어져야 하기 때문에 더 큰 보폭으로 search를 해야 최적화가 되기 쉽다. Learning rates. It’s common to use a smaller learning rate for ConvN..

Tensorflow Weight Initializer

평균 0, 분산 1 weight initialization 방법 weight_init = tf.keras.initializaers.RandomNormal() Xavier Initialization (평균 0, 분산 2/Channel_in + Channel_out)으로 구성된 분포로 random한 weight 초기화 방법) weight_init = tf.keras.initializaers.glorot_uniform() He initialization weight_init = tf.keras.initializaers.he_uniform() 케라스 레이어의 initial random weight 설정하는 방식 보통은 kernel initializer/ bias_initializer를 사용한다. model.ad..

Group Normalization vs Batch Normalization

Channel Height Weight Nums Batch Norm 배치 단위로 정규화하는 것으로 batch 의 크기에 영향을 많이 받는다. 데이터를 정규화하게 되면 활성화 함수의비선형과 같은 특징을 잃게 되는데 이러한 문제를 완화하기 위해 shift와 scale을 사용한다. (비선형의 성질을 보존하기 위함) Layer Norm 입력 데이터의 (1회) 반복마다 평균과 표준편차를 구한다. 하나의 이미지에서 동작하며, 평균/분산이 다른 데이터와 독립적으로 계산된다. Instance Norm 각 훈련 이미지의 각 채널에 대한 평균/분산을 계산한다. Style Transfer를 위해 고안된 방법이기 때문에 style transfer에서 배치 정규화를 대체하여 많이 사용하고 GANs에서 배치 정규화를 대체하여 사..

Batch Normalization(배치 정규화)

Batch Normalization(배치정규화) : 각 층의 출력값들을 정규화하는 방법 : 배치 정규화를 통해서 Vanishing Gradient 현상을 해결하고 근본적으로 학습과정을 안정화할 수 있다. 깊은 신경망일 수록 같은 input 값을 갖더라도 가중치가 조금만 달라지면 완전히 다른 값을 얻을 수 있다. 이를 해결하기 위해서 각 층의 출력값에 배치정규화 과정을 추가해서 가중치의 차이를 완화해서 보다 안정적인 학습이 이루어질 수 있도록 한다. Algorithm의 개요는 위와 같다. 뉴럴넷을 학습시킬때 미니 배치 단위로 데이터를 가져와서 학습시키는데, 각 미니배치의 평균값과 표준편차값을 구해준 다음에 normalize 해주고, scale factor와 shift factor를 이용하여 새로운 값을 만..

Weight initialization(가중치초기화 )

가중치 초기화 : 딥러닝의 가장 일반적인 문제 Vanishing / Exploding Gradient 문제를 해결하기 위한 방법 중 하나 1. 초기화를 0으로 한다면 ? weight 값이 0으로 이루어져있기 때문에 곱셈 연산이 되지 않고, 학습이 잘 이루어 지지않음. 모든 뉴런이 "같은일" 을 한다. 가중치가 0이기 때문에 모든 뉴런은 모두 다 같은 연산을 한다. 같은 연산을 하기 때문에 gradient도 같을 것이고 모든 뉴런이 똑같이 업데이트가 될 것이다. 역전파 가중치 업데이트 또한 동일하게 발생 2. 초기화를 너무 크거나 작은 값으로 한다면 ? 학습이 잘 되지 않음. 두 개의 방법 모두 학습이 잘 되지 않는다. 해결 방법으로는 Xavier initialization : 레이어의 출력 분산을 입력의..