Machine Learning/혼자 공부하는 머신러닝+딥러닝

7-2 심층신경망

햄스텅 2022. 1. 23. 15:51
키워드

심층 신경망 = 2개 이상의 층을 포함한 신경망이다. 다층 인공 신경망, 심층 신경망, 딥러닝을 같은 의미로 사용한다

렐루 함수 = 이미지 분류 모델의 은닉층에 많이 사용하는 활성화 함수이다. 시그모이드 함수는 층이 많을수록 활성화 함수의 양쪽 끝에서 변화가 작기 때문에 학습이 어려워진다. 렐루함수는 이런 문제가 없으며 계산도 간단하다

옵티마이저 = 신경망의 가중치와 절편을 학습하기 위한 알고리즘 또는 방법을 말한다. 대표적으로 SGD, 네스테로프 모멘텀, RMSprop, ADam 등이 있다

 

from tensorflow import keras
(train_input, train_target), (test_input, test_target) =\
    keras.datasets.fashion_mnist.load_data()

이미지의 픽셀값을 0 - 255범위에서 0~1로 변환하고, 28*28크기의 2차원 배열을 784크기의 1차원 배열로 펼친다

from sklearn.model_selection import train_test_split
train_scaled = train_input / 255.0
train_scaled = train_scaled.reshape(-1,28*28)
train_scaled, val_scaled, train_target, val_target = train_test_split(train_scaled, train_target, test_size=0.2, random_state=42)

입력층과 출력층 사이에 밀집층 추가 -> 은닉층

활성화 함수는 신경망 층의 선형방정식의 계산 값에 적용하는 함수!

출력층에 적용하는 활성화함수는 종류가 제한되어있다.
이진분류 -> 시그모이드 함수
다중분류 -> 소프트맥스 함수

dense1 = keras.layers.Dense(100, activation='sigmoid', input_shape = (784,))
dense2 = keras.layers.Dense(10, activation='softmax')

심층신경망 만들기

model = keras.Sequential([dense1,dense2])

model.summary()

model = keras.Sequential([keras.layers.Dense(100,activation='sigmoid', input_shape=(784,), name='hidden'),
                          keras.layers.Dense(10, activation='softmax', name='output')], name = '패션 MNIST 모델')

model.summary()

층을 추가할때 가장 널리 사용하는 방법은 모델의 add() 메서드

model = keras.Sequential()
model.add(keras.layers.Dense(100,activation='sigmoid', input_shape=(784,)))
model.add(keras.layers.Dense(10, activation='softmax'))

5번의 에포크 동안 훈련하기

model.compile(loss='sparse_categorical_crossentropy', metrics='accuracy')
model.fit(train_scaled, train_target, epochs=5)

렐루함수 = 아주 간단한것이 장점. 입력이 양수일 경우에는 마치 활성화함수가 없는 것처럼 그냥 입력을 통과시키고 음수일 경우에는 0으로 만든다

특히 이미지 처리에서 좋은 성능을 낸다 !!

model = keras.Sequential()
model.add(keras.layers.Flatten(input_shape = (28,28)))
model.add(keras.layers.Dense(100, activation='relu'))
model.add(keras.layers.Dense(10, activation='softmax'))

model.summary()

(train_input, train_target), (test_input, test_target) = \
    keras.datasets.fashion_mnist.load_data()
train_scaled = train_input / 255.0
train_scaled, val_scaled, train_target, val_target = train_test_split(train_scaled, train_target, test_size=0.2, random_state=42)

model.compile(loss='sparse_categorical_crossentropy', metrics='accuracy')
model.fit(train_scaled, train_target, epochs=5)

model.evaluate(val_scaled, val_target)

model = keras.Sequential()
model.add(keras.layers.Flatten(input_shape = (28,28)))
model.add(keras.layers.Dense(100, activation='relu'))
model.add(keras.layers.Dense(10,activation='softmax'))

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy',metrics='accuracy')
model.fit(train_scaled, train_target, epochs=5)

model.evaluate(val_scaled, val_target)