[용어 정리]
① 인공 신경망 : 생물학적 뉴런에서 영감을 받아 만든 머신러닝 알고리즘이며, 이미지, 음성, 텍스트 분야에서 주로 사용됩니다. 인공 신경망 알고리즘은 현재 딥러닝이라는 용어로도 불리고 있습니다.
<추가 설명>
⒜ 딥러닝에서 가장 기본이 되는 개념은 신경망 (Neural Network)
⒝ 뇌 구조의 특성 중 뉴런의 연결 구조를 본떠 만든 네트워크 구조를 인공 신경망이라 칭함
② 밀집층 : 가장 간단한 인공 신경망의 층, 밀집층에서는 뉴런들이 모두 연결되어 있기 때문에 완전 연결 층이라고도
불리며, 출력층에 밀집층을 사용할 때는 분류하려는 클래스와 동일한 개수의 뉴런을 사용 해야 합니다.
[TensorFlow 함수]
① Dense : 신경망에서 가장 기본 층인 밀집층을 만드는 클래스
② Sequential : 케라스에서 신경망 모델을 만드는 클래스
③ compile : 모델 객체를 만든 후, 훈련하기 전에 사용할 손실 함수와 측정 지표 등을 지정하는 메서드
④ fit : 모델을 훈련하는 메서드 (1,2번 매개변수는 입력과 타깃 데이터를 입력, 3번 매개 변수는 epochs 입력)
⑤ evaluate : 모델 성능을 평가하는 메서드
[Data Set]
패션 MNIST → 28 X 28, 6만개 GrayScale Image
[Data Set 분할]
from tensorflow import keras
((train_input, train_target), (test_input, test_target) =
\ keras.datasets.fashion_mnist.load_data()
# .load_data() function을 통해 train, test Data를 Return 받음
print(train_input.shape, train_target.shape)
# (60000, 28, 28) (60000,)
[Train Image Check]
import matplotlib.pyplot as plt
fig, axs = plt.subplots(1, 10, figsize=(10,10))
for i in range(10):
axs[i].imshow(train_input[i], cmap='gray_r')
axs[i].axis('off')
plt.show()
[Train Target Image Check]
print([train_target[i] for i in range(10)])
# [9, 0, 0, 3, 0, 2, 7, 2, 5, 5]
# 앵글 부츠, 티셔츠, 티셔츠, 드레스 ...
[로지스틱 회귀로 패션 아이템 분류]
# MNIST의 경우 각 픽셀값을 0 ~ 255 사이의 정숫값을 가지므로
# train_input Data를 255로 나누어 0~1 사이로 정규화 진행
train_scaled = train_input / 255.0
# 1번째 매개변수 -1 지정 시, 자동으로 남은 차원을 할당
# MNIST는 28 * 28 Data, SGDClassifier는 2차원 입력을 다루지 못함
train_scaled = train_scaled.reshape(-1, 28*28)
# 2차원 → 1차원 shape 변환
from sklearn.model_selection import cross_validate
from sklearn.linear_model import SGDClassifier
# loss 손실 함수, 반복 횟수, 랜덤 고정
# log 일 때, 10개의 이진 분류 작업을 수행
# ex) 1개를 target으로 설정하고 나머지 9개는 ignore
sc = SGDClassifier(loss='log', max_iter=5, random_state=42)
# cross_validate 함수 이용하여 데이터의 교차 검증 성능 확인
scores = cross_validate(sc, train_scaled, train_target, n_jobs=-1)
print(np.mean(scores['test_score']))
# 0.8195666666666668
[인공 신경망 이용 패션 아이템 분류]
import tensorflow as tf # tensorflow import
from tensorflow import keras # keras
# 인공 신경망 모델 생성
from sklearn.model_selection import train_test_split
# Data 분할 (학습, 검증 ) → 이전 data 분할 시, 학습과 test data set이였음
train_scaled, val_scaled, train_target, val_target = train_test_split(
train_scaled, train_target, test_size=0.2, random_state=42)
# shapre check
print(train_scaled.shape, train_target.shape)
# (48000, 784) (48000, )
# 밀집층 생성
# 10 - 뉴런 개수, sofrmat - 뉴런 출력에 적용할 함수, 입력 크기
dense = keras.layers.Dense(10, activation='softmax', input_shape=(784,))
# 신경망 모델 생성 (매개변수로 밀집층 변수를 받음)
model = keras.Sequential(dense)
model.compile(loss='sparse_categorical_crossentropy', metrics='accuracy')
print(train_target[:10]) # traget data
# model 학습, epochs = 5 → 반복 횟수
model.fit(train_scaled, train_target, epochs=5)
# ----------------------
Epoch 1/5
1500/1500 [==============================] - 6s 2ms/step - loss: 0.6105 - accuracy: 0.7958
Epoch 2/5
1500/1500 [==============================] - 3s 2ms/step - loss: 0.4796 - accuracy: 0.8396
Epoch 3/5
1500/1500 [==============================] - 3s 2ms/step - loss: 0.4565 - accuracy: 0.8476
Epoch 4/5
1500/1500 [==============================] - 3s 2ms/step - loss: 0.4444 - accuracy: 0.8522
Epoch 5/5
1500/1500 [==============================] - 3s 2ms/step - loss: 0.4363 - accuracy: 0.8544
<keras.callbacks.History at 0x7f27704743d0>
# ----------------------
# 성능 평가
model.evaluate(val_scaled, val_target)
# ----------------------
375/375 [==============================] - 1s 2ms/step - loss: 0.4462 - accuracy: 0.8494
[0.44616803526878357, 0.8494166731834412]
# ----------------------
▶ 검증 세트의 결과치가 훈련 세트 결과치보다 낮은 것은 일반적이며, 위 결과처럼 검증 결과치(0.8494) 보다
훈련 학습에서의 마지막 epoch 결과치(0.8544)가 더 높게 출력된 것을 확인 할 수 있다.
'Deep Learning > 혼공 머신 러닝 - 딥러닝' 카테고리의 다른 글
[DL] 신경망 모델 훈련 (0) | 2022.01.04 |
---|---|
[DL] 심층 신경망 (0) | 2022.01.04 |
[DL] 소프트맥스 (softmax) (0) | 2022.01.03 |
[DL] 22.01.02 메모 (0) | 2022.01.02 |
[DL] DL에서 사용 하는 활성화 함수의 역할 (0) | 2022.01.02 |