딥러닝 (Deep Learning)/tensorflow, keras

[tensorflow, keras] 딥러닝 기본 코드(1) - Layer(Dense, Activation, Flatten, Input)

DS지니 2021. 10. 14. 18:07
728x90
반응형
[youtube] Deep Learning Full Tutorial Course using TensorFlow and Keras - 이수안컴퓨터연구소 참고

 

🧡목차

딥러닝 구조 및 학습

 

1. 레이어

- dense

- activation

- flatten

- input

 


 

딥러닝 구조 및 학습

  • 딥러닝 구조와 학습에 필요한 요소
    • 모델(네트워크)를 구성하는 레이어(layer)
    • 입력 데이터와 그에 대한 목적(결과)
    • 학습시에 사용할 피드백을 정의하는 손실 함수(loss function)
    • 학습 진행 방식을 결정하는 옵티마이저(optimizer)

 

 

1. 레이어(Layer)

  • 신경망의 핵심 데이터 구조
  • 하나 이상의 텐서를 입력받아 하나 이상의 텐서를 출력하는 데이터 처리 모듈
  • 상태가 없는 레이어도 있지만, 대부분 가중치(weight)라는 레이어 상태를 가짐
  • 가중치는 확률적 경사 하강법에 의해 학습되는 하나 이상의 텐서
  • Keras에서 사용되는 주요 레이어
    • Dense
    • Activation
    • Flatten
    • Input
from tensorflow.keras.layers import Dense, Activation, Flatten, Input

 

 

1) Dense

  • 완전연결계층(Fully-Connected Layer)
  • 노드수(유닛수), 활성화 함수(activation) 등을 지정
  • name을 통한 레이어간 구분 가능
  • 가중치 초기화(kernel_initializer)
    • 신경망의 성능에 큰 영향을 주는 요소
    • 보통 가중치의 초기값으로 0에 가까운 무작위 값 사용
    • 특정 구조의 신경망을 동일한 학습 데이터로 학습시키더라도, 가중치의 초기값에 따라 학습된 신경망의 성능 차이가 날 수 있음
    • 오차역전파 알고리즘은 기본적으로 경사하강법을 사용하기 때문에 최적해가 아닌 지역해에 빠질 가능성이 있음
    • Keras에서는 기본적으로 Glorot uniform 가중치(Xavier 분포 초기화), zeros bias로 초기화
    • kernel_initializer 인자를 통해 다른 가중치 초기화 지정 가능
    • Keras에서 제공하는 가중치 초기화 종류: https://keras.io/api/layers/initializers/
#Denselayer 코드(activation, 초기화, 이름지정)
Dense(10, activation="relu", kernel_initializer="he_normal", name="Dense Layer")

 

 

2) Activation

  • Dense layer에서 미리 활성화 함수를 지정할 수도 있지만 필요에 따라 별도 레이어를 만들어줄 수 있음
  • Keras에서 제공하는 활성화 함수(activation function) 종류: https://keras.io/ko/activations/
#Dense함수로 지정할 수도 있고 따로 Activation함수로 지정해줄 수도 있다.
dense = Dense(10, activation='relu', name='Dense Layer')
Activation(dense)

활성화함수 요약정리 - https://gggggeun.tistory.com/105?category=990621

 

 

3) Flatten

  • 배치 크기(또는 데이터 크기)를 제외하고 데이터를 1차원으로 쭉 펼치는 작업
  • 예시)  (128, 3, 2, 2) -> (128, 12)  
Flatten(input_shape=(128, 3, 2, 2))

 

 

4) Input

  • 모델의 입력을 정의
  • shape, dtype을 포함
  • 하나의 모델은 여러 개의 입력을 가질 수 있음
  • summary() 메소드를 통해서는 보이지 않음
Input(shape=(28,28), dtype=tf.float32)
Input(shape=(8,), dtype=tf.int32)

 

 

728x90
반응형