[딥러닝] 8장 심층신경망

2024. 12. 6. 12:23·etc

심층신경망 (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
'etc' 카테고리의 다른 글
  • [딥러닝] 11장 순환신경망
  • [딥러닝] 10장 영상인식
  • [딥러닝] 9장 CNN
  • [딥러닝] 7장 MLP-2
zioni
zioni
  • zioni
    jiwon's dev.log
    zioni
  • 전체
    오늘
    어제
    • 분류 전체보기 (76)
      • spring & java (13)
      • Algorithm (14)
      • PS (37)
      • project (3)
      • experience (1)
      • etc (6)
      • study (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    백준
    자바
    백준2525
    java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
zioni
[딥러닝] 8장 심층신경망
상단으로

티스토리툴바