이미지 정규화
모든이미지는 0~255의 숫자로 되어있다. 8bits 흑백사진
모든 픽셀값이 0~1사이 값을 가지도록 한다 -> 정규화 normalization.
x_train.min(), x_train.max() -> 0과 255나타낸다.
x값을 255로 나눠준다. x_train -> x_train/255 x_valid -> x_valid /255
정규화를 하는 이유
- 정규화를 하면 학습시 수렴하는 속도가 빨라진다. 데이터가 분산된 정도에 따라 수렴하는 속도가 달라질 수 있다.
- 이미지 데이터의 경우에는 0~255라는 한계범위를 알고 있기 때문에 정규화를 시켜준다.
- 하지만 이상치가 있는 경우에는 정규화가 안좋은 영향을 끼칠 수 있다.
원핫인코딩
봄, 여름, 가을, 겨울 -> 컴퓨터는 글자를 인식할 수 없어서 숫자로 바꿔야한다.
그럼 봄여름가을겨울을 1,2,3,4 로 설정하면 안될까? 그렇게 되면 1+2 =3 이라는 관계를 생각해서 오류가 발생한다.
그렇기 때문에 [1,0,0,0] [0,1,0,0] 과 같이 하나의 라이블 값에 대해서 독립적인 값을 만들어줘야한다. 하나의 레이블만 핫 하게 만드는 방법
활성함수 activation function
선형함수 Dense 만 쌓게 되면 선형x선형 = 선형이기 때문에 딥러닝의 의미가 줄어든다 ( =복잡한 문제를 풀지 못한다)
선형과 비선형 함수를 섞어주면 복잡한 문제를 더 잘 풀 수 있다.
relu, sigmoid, softmax
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=28,28)),
tf.keras.layers.Dense(512),
tf.keras.layers.LeRu(),
tf.keras.layers.Dense(512),
tf.keras.layers.LeRu(),
tf.keras.layers.Dense(10),
tf.keras.layers.Softmax(), ]) 와 같이 쓰는 것을 다음처럼 줄일 수 있다.
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=28,28)),
tf.keras.layers.Dense(512, activation='relu'),
tf.keras.layers.Dense(512, activation='relu'),
tf.keras.layers.Dense(10, activation='softmax'),
])
relu함수 이외의 함수들을 사용할 경우 그라디언트 소실이 있어서 relu를 주로 쓴다.
그외의 함수들
https://www.tensorflow.org/api_docs/python/tf/keras/activations
분류모델에서는 마지막층에 softmax혹은 sigmoid 활성함수가 와야한다.
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=28,28)),
tf.keras.layers.Dense(512, activation='relu'),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(10, activation='softmax'), or tf.keras.layers.Dense(10, activation='sigmoid'),
])
이진분류 binary classification 에서 활성함수에 따라 loss 를 다르게 사용한다.
Dense(1, activation = 'sigmoid') -> loss = 'binary_crossentorpy' 를 사용하고
Dense(2 이상, activation = 'softmax'0 -> loss = 'cartegorical_crossentroypy' (원핫 가능)혹은 'sparse_cartegorical_crossentorpy'사용 (원핫 불가능)
시스모이드는 모든 x 값에 대해 0과 1 사이의 값(확률로 )으로 만들 수 있다. (기준 하나를 설정하면 반드시 2가지를 구분할 수 있다)
소프트맥스는 각각에 대한 확률값을 모두 비교해서 가장 큰 값을 해당 클래스로 정한다. 모든 확률의 합은 반드시 1이된다.