인공신경망은 머신러닝의 한 종류이다. 가장 단순한 인공 신경망의 형태는 로지스틱 회귀 분석과 동일하다. 인공신경망은 입력층, 밀집층, 출력층으로 구성되어 있다. 인공 신경망은 주로 텐서플로우(케라스)와 파이토치 라는 라이브러리로 실행시키는데, 이 책에서는 텐서플로우를 이용한다. 기초적인 인공신경망에서 인공신경망의 구조를 잘 파악해서 나중에 어려운 인공신경망을 만들 때 이용하면 좋을 것 같다.
from sklearn.model_selection import train_test_split
from tensorflow import keras
train_scaled, val_scaled, train_target, val_target = train_test_split(
train_scaled, train_target, test_size = 0.2, random_state = 42
)
# 밀집층 (소프트 맥스 - 다중 분류이기 때문에 cf: 이중 분류이면 시그모이드)
dense = keras.layers.Dense(10, activation = 'softmax', input_shape = (784,))
model = keras.Sequential([dense])
# 인공신경망 설정(sparse - 원 핫 인코딩 안되어있는 출력층, categorical_crossentropy - 다중분류)
model.compile(loss = 'sparse_categorical_crossentropy', metrics = ['accuracy'])
model.fit(train_scaled, train_target, epochs = 5)
model.evaluate(val_scaled, val_target)
심층 신경망은 인공 신경망에 은닉층을 추가하여 만드는 것이다. 만드는 방법은 간단하다. 인공신경망 밀집층에 layer를 추가하면 된다. 이 장에서는 옵티마이저도 배우는데, 옵티마이저는 모델이 경사하강으로 훈련할때 어떤 방식으로 하강할지 선택하는 것이다.
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)
7-1 확인 문제 풀고, 풀이 과정 정리하기
1) 어떤 인공 신경망의 입력 특성이 100갱이고 밀집층에 있는 뉴런 개수가 10개일 때 필요한 모델 파라미터의 개수는 몇 개인가요?
A: 1000개
2) 케라스의 Dense 클래스를 사용해 신경망의 출력층을 만들려고 합니다. 이 신경망이 이진 분류 모델이라면 activation 매개변수에 어떤 활성화 함수를 지정해야 하나요?
A: 'sigmoid'
3) 케라스 모델에서 손실함수와 측정 지표등을 지정하는 메서드는 무엇인가요?
A: compile()
4) 정수 레이블을 타깃으로 가지는 다중 분류 문제일 때 케라스 모델의 compile() 메서드에 지정할 손실 함수로 적절한 것은?
A: 'sparse_categorical_crossentropy'