심층신경망 (DNN) 이란?
- MLP에서 은닉층의 개수를 증가시킨 것

출력층에서 계산된 그래디언트가 역전파되다가 값이 점점 작아져서 없어지는 문제점 -> 해결
훈련 데이터가 충분하지 못하면, 과잉 적합 일어날 가능성 -> 해결

1) 그래디언트 소실 문제
- 원인은 시그모이드 함수
- 문제를 해결하기 위해 심층 신경망에서는 활성화 함수로 ReLU 함수 이용
기존 : 손실함수로 MSE (평균 제곱 오차) 사용
목표 출력 : 원-핫 인코딩
실제 출력: 소프트 맥스 함수 출력

-> 완벽하게 일치하면 0
케라스에서는 손실 함수로 교차 엔트로피를 많이 사용한다. -> 2개의 확률 분포간의 거리를 측정한 것!!
BinaryCrossEntropy: 이진 교차 엔트로피는 이진 분류 문제를 해결하는 데 사용되는 손실 함수이다.
분류해야 하는 부류가 두가지 뿐일때 사용한다.
CategoricalCrossentropy : 분류해야할 부류가 두개 이상일떄 사용한다.
정답 레이블은 원-핫 인코딩으로 제공한다.
SparseCategoricalCrossentropy : 정답 레이블이 원-핫 인코딩이 아니고 정수로 주어지면 사용한다.
가중치 초기화 문제
가중치의 초기값은 난수로 결정되어야 한다.
범주형 데이터 변환
범주형 데이터 -> 숫자형 데이터로 변환 하여야 함 !!
1) 정수 인코딩 : 각 레이블이 정수로 매핑되는 경우
2) 원-핫 인코딩 : 각 레이블이 이진 벡터에 매핑되는 경우
- 하나의 값만 1이고 나머지는 모두 0인 인코딩

import numpy as np
X = np.array([['Korea', 44, 7200],
['Japan', 27, 4800],
['China', 30, 6100]])
from sklearn.preprocessingimport OneHotEncoder
onehotencoder= OneHotEncoder()
# 원하는 열을 뽑아서 2차원 배열로 만들어서 전달하여야 한다.
XX = onehotencoder.fit_transform(X[:,0].reshape(-1,1)).toarray()
print(XX)
X = np.delete(X, [0], axis=1) # 0번째 열 삭제
X = np.concatenate((XX, X), axis = 1) # X와 XX를 붙인다.
print(X)
3) 임베딩 : 범주의 분산된 표현이 학습되는 경우
과잉적합이란?
- 지나치게 훈련 데이터에 특화돼 실제 적용 시 좋지 못한 결과가 나오는 것
1) 조기 종료
- 검증 손실이 감소하지 않는 것처럼 보일때 훈련 종료

2) 가중치 규제방법
- 가중치의 값이 너무 클 경우 과잉 적합이 일어날 수 있음
3) 데이터 증강 방법
- 소량의 훈련 데이터에서 많은 훈련 데이터를 뽑아내는 방법
4) 드롭아웃 방법
- 몇개의 노드들을 학습 과정에서 랜덤하게 제외하는 것
# 신경망 모델 구축
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(16, activation='relu', input_shape=(10000,)))
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.Dense(16, activation='relu'))
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.Dense(1, activation='sigmoid'))
DNN을 이용한 MNIST 필기체 숫자 인식
import matplotlib.pyplot as plt
import tensorflow as tf
mnist= tf.keras.datasets.mnist
(x_train, y_train),(x_test, y_test)= mnist.load_data()
x_train, x_test= x_train/255.0, x_test/255.0
model= tf.keras.models.Sequential()
model.add(tf.keras.layers.Flatten(input_shape=(28,28)))
model.add(tf.keras.layers.Dense(512,activation='relu'))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Dense(10, activation='softmax'))
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test)
'etc' 카테고리의 다른 글
| [딥러닝] 12장 자연어 처리 (0) | 2024.12.08 |
|---|---|
| [딥러닝] 11장 순환신경망 (2) | 2024.12.08 |
| [딥러닝] 10장 영상인식 (1) | 2024.12.07 |
| [딥러닝] 9장 CNN (2) | 2024.12.07 |
| [딥러닝] 7장 MLP-2 (2) | 2024.12.06 |