Molybdenum의 개발기록

[TIL] 71일차_Deep Learning_Modeling 본문

TIL

[TIL] 71일차_Deep Learning_Modeling

Molybdenum_j 2023. 4. 12. 13:28
딥러닝 학습방법

1) 적절한 네트워크 선택

    - 구조(struncture) : 입력값의 형태

    - 비선형성(nonlinearity) 획득방법 : ReLu vs tanh, etc

2) gradient 확인 : 네트워크 구축 시 그래디언트 설정이 잘 되었는지 확인

3) 학습 파라미터 초기화 : 초기화 방법에도 여러가지가 있으므로 적절히 선택한다.

4) 학습 파라미터 최적화 : 경사하강법(GD, SGD, Adam 등)

5) 과적합 방지 : 드롭아웃, 정규화 등

 

출력층에서 활성화 함수

- 분류에 사용되는 활성화 함수 = Sigmoid, Softmax 함수 : 모든 입력 신호로부터 영향을 받음

- 회귀에 사용되는 활성화 함수 = 항등함수(identify function) : 계산된 값을 그대로 출력

Softmax 함수                                                                                                               항등함수

 

Keras

: tf.keras는 딥러닝 모델을 빌드하고 학습시키기 위한 TensorFlow의 상위 수준 API

신속한 프로토타입 제작, 최첨단 연구 및 프로덕션에 사용된다. 

    - 사용자 친화적

    - 모듈식 및 구성 가능

    - 쉽게 확장 가능

 

MNIST로 손글씨 분류

: 흑백 손글씨 숫자 이미지를 10개의 범주(0~9까지) 로 분류하는 문제로 MNIST 데이터셋은 머신러닝의 역사만큼 오래되었고 많은 연구에 이용됨

# 데이터셋 로드하기
from tensorflow.keras.datasets import mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

# train_images와 train_labels가 모델이 학습해야 할 훈련세트를 구성
print(train_images.shape, train_labels.shape)

# 모델은 test_images와 test_labels로 구성된 테스트 세트에서 테스트
print(test_images.shape, test_labels.shape)

import matplotlib.pyplot as plt
digit = train_images[0]
plt.imshow(digit, cmap=plt.cm.binary)
plt.show()

 

Dense layer(밀집층)

: 완전 연결 계층(Fully Connected Layer)인 밀집층은 내부 뉴런이 이전 계층의 모든 뉴런에 연결되는 계층

1차원 벡터로 변환된 레이어를 하나의 벡터로 연결(각 층의 노드들은 하나로 연결)된다.

모든 매개변수가 완전 연결 계층에 점유되기 때문에 과적합 발생이 높다 => Dropout으로 해결

 

Flatten - 2차원 데이터를 1차원 데이터로 바꾸는 역할

model = tf.keras.models.Sequential()

-> 모델만들기는 필요한 layer을 연결하여 구성한다(입력층->은닉층-> 출력층)

Sequential 모델은 각 레이어에 정확히 하나의 입력 tensor와 하나의 출력 tensor가 있는 일반 레이어 스택에 적합하다.

tf.keras.layers.Dense와 같은 층들의 가중치(parameter)는 훈련하는 동안 학습된다.

 

tf.keras.layers.Flatten(input_shape=(28, 28))

-> 이미지 차원의 자료를 1차원 자료로 변경한다.

 

tf.keras.layers.Dense()

-> Dense층은 밀집 연결(densely-connected) 또는 완전 연결(fully-connected) 층이라고 명명한다.

 

모델만들기(분류)
model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),  
  tf.keras.layers.Dense(128, activation='relu'),  
  tf.keras.layers.Dropout(0.2),  
  tf.keras.layers.Dense(10, activation='softmax') ])

=> Dense층 2개가 연속되며 마지막 층은 10개의 확률 점수가 들어 있는 배열을 반환하는 softmax층이다.

각 점수는 현재 숫자 이미지가 10개의 숫자 클래스 중 하나에 속할 확률이다.

더보기
  Sigmoid Softmax
로지스틱 회귀 모델에서 분류 종류 이진분류 다중 클래스 분류
활용 활성화 함수로 사용
이진 분류의 출력 층에서 사용
통계에서 누적 분포 함수로 사용
다중 클래스 분류의 출력층에서 사용
반환 값 1개로 반환 N개로 반환되며 모든 확률의 합이 1이 된다.
분류모델에서의 값 선택 특정 임계값에 따라 값을 선택 가장 큰 값으로 반환되는 값을 해당 클래스로 선택

 

 

모델만들기(회귀)
model = keras.Sequential([
    layers.Dense(64, activation='relu',
		input_shape=[len(train_dataset.keys())]),
    layers.Dense(64, activation='relu'),
    layers.Dense(1)])

=> 두 개의 완전 연결(densely connected) 은닉층으로 sequential 모델을 구성한다.

출력층은 하나의 연속적인 값을 반환하며 회귀에서의 출력층은 현재가지 계산된 값을 그대로 출력해야 하기에 항등 함수를 사용하여 현재까지 계산된 값을 그대로 출력 -> 연속형 변수에 대한 예측값을 출력하는 회귀문제에서 출력층의 활성함수로 항등 함수 사용

 

 


1) 층구성(tf.keras.sequential()) 

tf.keras.models.Sequential([
   tf.keras.Input(), # 입력층
   tf.keras.layers.Dense(), # 은닉층
   tf.keras.layers.Dense() # 출력층
])

2) 활성화 함수(activation)

- ‘linear’ : 그대로 출력

- ‘relu’ : 은닉층에 주로 사용

- ‘sigmoid’ : 이진 분류 문제(출력층)

- ‘softmax’ :다중 클래스 분류 문제(출력층)

출력층 활성화 함수는 compile 에서 지정하는 loss  값에 따라 다릅니다.

 

3) 컴파일(model.compile())

model.compile(optimizer, loss, metrics)

- optimizer: SGD, RMSprop, Adam

- loss 

 회귀: MAE, MSE,

 분류:binary_crossentropy(이진분류)

        categorical_crossentropy

        (다중분류: one-hot-encoding)  

        sparse_categorical_crossentropy

        (다중분류: ordinal Encoding)

- metrics: 

 분류 : accuracy, AUC

 회귀 : MAE, MSE

 

4) 요약(model.summary())

model.summary()

- Layer (type)

- Output Shape

- Param

 

5) 학습(model.fit())

model.fit(X_train, y_train, epochs)

tf.keras.callbacks.history()

- acc : 훈련 정확도

- val_acc : 검증 정확도

- loss : 훈련 손실값

- val_loss : 검증 손실값

 

6) 예측(model.predict())

model.predict(x_test)

 

7) 평가(model.evaluate())

model.evaluate(X_test, y_test)

'TIL' 카테고리의 다른 글

[TIL] 71일차_Deep Learning_CNN_ILSVRC Algorithm  (0) 2023.04.19
[TIL] 71일차_Deep Learning_CNN  (0) 2023.04.12
[TIL] 70일차_Deep Learning_ANN_DNN  (0) 2023.04.11
[TIL] 69일차_Deep Learning  (0) 2023.04.10
[TIL] 58일차_Tableau_Modeling_Dashboard  (0) 2023.03.24
Comments