DNN은 Deap Neural Network의 약자이다. 은닉 계층이 여러개인 인공신경망을 의미한다.
은닉계층은 신경망의 외부에서 직접 접근할 수 없는 노드들을 의미한다.
제 1 은닉계층의 결과는 출력 계층이 아닌 제 2 은닉계층으로 들어가고, 제 2 은닉계층의 결과도 다음 은닉계층으로 계속 들어갈 수 있다. 이런식으로 다수의 은닉 계층을 활용하면 은닉계층 하나를 활용하는 것 보다 입력값을 더 정교하게 처리할 수 있다.
다음은 dnn을 이용하여 mnist 데이터를 학습시키는 코드이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
import tensorflow as tf
# mnist dataset 가져옴(numpy 튜플 배열)
# x_train : 60000개, 학습용
# x_test : 10000개, 테스트용
# x_train, x_test : 이미지 모양이 있는 unit8 배열
# y_train, y_test : 0~9 까지의 숫자 레이블
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
# Sequential 모델 : 각 레이어에 정확히 하나의 입력 텐서와 하나의 출력 텐서가 있는
# 일반 레이어 스택에 적합하다.
#
# layers.Flatten : 입력 이미지의 크기 지정, 1차원 텐서로 펼침(28 * 28 = 784)
# layers.Dense : 첫 번째 레이어에서 제공되는 784개의 값을 128개의 값으로 인코딩, 활성 함수로 relu 사용
# layers.Dropout : 이전 값 128개중 0.2(20%)가 다음 레이어의 입력에서 무시됨, 20% 무시한 값은 4번째 레이어에 입력
# 10개의 값을 softmax 함수를 이용하여 출력
# 최종 출력값은 입력 이미지가 0~9까지의 어떤 숫자를 의미하는지에 대한 각각의 확률
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)), # image size
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation='softmax')
])
# compile : 학습을 위한 모델 구성
# optimizer : 사용 알고리즘 결정
# adam : 각 파라미터마다 다른 크기의 업데이트를 적용하는 방법
# loss : 손실값에 적용할 함수
# sparse_categorical_crossentropy : 샘플 값이 정수형 자료일 때 사용
# metrics : 학습 및 테스트 중 모델 평가(정확성)
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# 학습에 사용되는 데이터셋으로 학습함, epoch는 전테 데이터셋에 대해 한 번 학습을 완료한 상태
# 5로 지정했기 때문에 전체 데이터를 5번 사용하여 학습을 거침
model.fit(x_train, y_train, epochs=5)
# 모델 평가
model.evaluate(x_test, y_test, verbose=2)
|
cs |
mnist 데이터 셋은 손글씨 이미지들로 구성되어 있는 데이터 세트로 28x28의 크기를 갖는다. 학습용 데이터셋은 60000개 이고, 테스트용 데이터셋은 10000개로 이루어져 있다.
코드를 실행시키면 학습 진행 과정과 학습후 테스트 했을 때 손실도와 정확도가 출력된다. 정확도는 97.63%이다.
학습 횟수를 2번으로 줄였더니 다음과 같이 정확도가 약간 감소하였다.
'AI' 카테고리의 다른 글
RNN(순환 신경망) (0) | 2021.03.31 |
---|---|
CNN(합성곱 신경망) (0) | 2021.03.31 |
Keras(케라스) (0) | 2021.03.28 |
Tensorflow(텐서플로우) (0) | 2021.03.28 |