분류 전체보기 129

BatchNormalization (Transfer Learning, Trainable 설정 )

Transfer Learning 을 할때에 BatchNormalization layer를 학습시키는지 아닌지에 따라서 결과차이가 차이남 from tensorflow.keras import layers f1 = tfa.metrics.F1Score(num_classes = CLASSES, average='macro') x = tf.keras.layers.Input(shape=(400,400,3), name = "image") base_model = tf.keras.applications.EfficientNetB3( include_top=False, weights='imagenet',input_tensor = x) base_model.summary() for layer in base_model.layers: ..

Deep learning 2021.09.15

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 : 레이어의 출력 분산을 입력의..