1. Multi Layer Perceptron 이론
1-1. 다중 신경망 모델이란?
- Multi Layer Perceptron은 여러 층의 뉴런들을 쌓아 구성한 신경망 모델을 의미한다.
1-2. 구조
- Input Layer(X1...Xm)와 hidden Layer1~ hiddne LayerN, Output Layer(Y1...)로 구성되어 있다.
- 특정 데이터셋으로 해당 알고리즘으로 학습시킨 모델(일종의 자동생성된 함수) 결과물은 x를 입력했을 때, 정답 y를 반환하는 식으로 동작한다.
- 각 layer 간에는 모든 node까리 서로 연결되어 weight를 가지는 것이 특징이다.
- 학습 파라미터 수에 비해, 성능이 높지는 않아 효율적이지는 않음
2. Multi Layer Perceptron 실습
Multi Layer Perceptron을 실습하면서, 기본적인 TensorFlow의 기본적인 사용법을 알아보자.
2-1. Tensorflow 기본 사용법 및 학습 데이터 전처리
# 1. Tensorflow를 사용하기 위해 관련 패키지 import [TensorFlow 패키지를 사용]
import tensorflow as tf
# 2. 모델 학습에 사용할 Data를 load [sklearn.datasets 패키지를 사용]
from sklearn.datasets import load_iris
# 2-1. 전체 데이터 가져오기
// 붓꽃에 대한 DataTable입니다.
// 해당 데이터는 "data" 테이블과 "target" 로 나눠어 있습니다.
// "data" 테이블의 Field는 4개입니다. (꽃받침의길이, 꽃받침의너비, 꽃잎의 길이, 꽃잎의 너비)
// "target" 테이블의 Field는 1개입니다. (분류[종륲])
// 분류(class) Field는 3가지 종류입니다. (setosa, versicolor, virginica)
// 분류값은 0,1,2 로 표시되며, label값이라고도 합니다.
// Row는 1000개 이상일 듯?
iris = load_iris()
x = iris['data']
y = iris['target']
# 2-2. 데이터 분리 [sklearn.model_selection 패키지 사용]
// 해당 패키지를 사용해서, data를 학습에 사용할 군과, test에 사용할 군으로 나눕니다.
// 수평 분할이라고 할 수 있습니다.
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3)
# 2-3. 로드 데이터 확인
print(type(x_train))
print(x_train.shape) # (105,4) : 4개 필드, 105개의 row로 구성된 테이블
print(type(y_train))
print(y_train.shape) # (105,) : 105개로 구성된 리스트
print(y_train[:10]) # 10번째 값까지 출력?
2-2. 네트워크 정의
# tf.keras.models.Sequential 패키지를 사용하면,
# 여러 layer를 원하는 대로 쌓을 수 있도록 설정하여, 네트워크를 구성할 수 있습니다
# Multi Layer Perceptron 또한 네트워크의 일종입니다.
# 두가지 방식으로 Layer를 쌓도록 설정할 수 있습니다.
1. Layer에 대한 속성값을 리스트형식으로 받아 네트워크 모델 불러오기
model_1 = tf.keras.models.Sequential([
tf.keras.layers.Dense(4, activation='relu', input_shape=(4,)),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(3, activation='softmax')
])
2. 네트워크 모델을 불러오고, add 함수를 통해 Layer에 대한 속성값 부여하기
model_2 = tf.keras.models.Sequential()
model_2.add(tf.keras.layers.Dense(64, activation='relu', input_shape=(4,)))
model_2.add(tf.keras.layers.Dropout(0.2))
model_2.add(tf.keras.layers.Dense(3, activation='softmax'))
# 각 Layer에 대한 설명
- Dense() : Fully Connected Layer를 하나 추가합니다.
첫번째 인자 : 해당 layer의 node 수입니다.
두번째 인자 : Activation function을 설정
> Hidden Layer들의 빠른 수렴을 위해 ReLU를 권장
> 2개 종류의 분류 문제의 Output Layer에는 sigmoid 함수를 권장
> 3개 이상 종류의 분류 문제의 Output Layer에는 softmax 함수를 권장
첫번째 Dense Layer는 32개의 node를 가지는 hidden Layer이고,
마지막 Dense Layer는 분류(class) 수에 맞게 3개의 node를 가지는 output Layer입니다.
- Dropout() : Dropout regularization(정규화)을 추가합니다.
첫번째 인자 : Dropout 적용 확율
주의사항
- 네트워크 정의를 보면, 첫번째 Dense Layer에만 input_shape라는 인자가 존재한다.
- 해당 예시에서는 input값이 붓꽃의 4가지 field값이므로, "input_shape=(4,)" 형식으로 선언해주어야 한다.
- Input Layer가 node를 4개로 시작하라라는 의미와 동일하다.
2-3. 모델 구조 확인
# summary 지원 함수를 통해, 모델의 구조를 확인할 수 있음
model_1.summary()
model_2.summary()
2-4. 모델 학습을 위한 설정
위에 까지 진행했다면, "모델의 구조"까지 정의된 것으로 생각하면 된다.
이제 "모델"에 "학습데이터"를 지정해서, 모델 결과물을 만들 차례이다.
# compile 지원 함수로, "모델 학습"에 대한 설정을 할 수 있습니다.
model_1.compile(
optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy']
)
# 첫번째 인자 : 'adam', 'sgd', 'rmsprop' 등을 선택할 수 있음, 빠른 수렴을 위해 adam을 권장
# 두번째 인자 : Loss의 경우, 다양한 선택지가 있음
- 2개의 분류 문제일 경우, 'binary_crossentropy'를 사용
- 2개 이상의 Multi-class 분류 문제의 경우, 'categorical_crossentropy' 또는
'sparse_categorical_crossentropy'를 사용합니다.
- 2개 이상의 Multi-class 분류 문제에서, label값이 0,1,2와 같이 하나의 정수 형태일 경우,
'sparse_categorical_crossentropy'를 사용합니다.
# 세번째 인자 : 평가 측정은 'accuracy'를 사용합니다.(모델이 분류한 값이 실제 정답과 얼마나 맞았는가(정답율)?)
2-5. 모델 학습
# fit 지원함수를 통해 실제로 "모델"을 "학습 데이터셋"으로 학습시켜 결과 모델을 만들 수 있습니다.
model_1.fit(x_train, y_train, epochs=30, batch_size=8)
첫번째 인자 : 학습용 data 데이터테이블
두번째 인자 : 학습용 class(분류값) 리스트
세번째 인자 : 학습할 epoch 수(몇 세대 학습?)
네번째 인자 : batch_size(총 배치 사이즈)
2-6. 모델 평가
# evaluate 지원함수를 통해 평가용 데이터와 label을 전달하여 평가를 진행할 수 있습니다.
model_1.evaluate(x_test, y_test);
# 측정 결과의 채점기준은 compile 함수에서 지정했듯이 accuracy를 기준으로 진행될 것입니다.
'Certificates' 카테고리의 다른 글
[TDC] Time Series Forecasting 개념 (0) | 2021.05.25 |
---|---|
[TDC] Natural Language Understanding 개념 (0) | 2021.05.25 |
[TDC] 이미지 분류 구현 - CNN (0) | 2021.05.25 |
[TDC] TDC 시험 준비 전략 및 환경구성, TensorFlow 개요 (0) | 2021.05.25 |
최근댓글