[텐서플로우] 모델 summary param 의미

소개

  • 안녕하세요. 오늘은 텐서플로우에서 기본으로 제공해 주는 함수인 summary 함수에 대해서 알려 드리려고 합니다.
  • summary 함수는 모델 구성에 대해서 확인할 수 있게 기본으로 제공해 주는 함수입니다.

예제 코드

import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt

from tensorflow import keras

# 학습데이터 준비
x = np.array([1,2,3,4,5,6,7,8,9,10])
y = np.array([1,2,3,4,5,6,7,8,9,10])

# Keras의 Sequential모델을 선언
model = keras.Sequential([
    # 첫 번째 Layer: 데이터를 신경망에 집어넣기
    keras.layers.Dense(32, activation='relu', input_shape = (1, )),
    # 두번째 층 
    keras.layers.Dense(32, activation='relu'),
    # 세번째 출력층: 예측 값 출력하기
    keras.layers.Dense(1)
])

model.summary()

실행 결과

  • 소스를 실행해서 summary 확인해 보니까 모델의 내용이 표로 정리되어 출력됩니다.
  • 첫 번째 층에서 32개의 node가 생성됨을 알 수 있습니다.
  • 두 번째 dense 층에서는 32개의 node, 세 번째 dense 층에서는 1개의 node가 생성 됨을 알 수 있습니다.
  • 하지만, 여기서 param이라는 컬럼이 보이고, 64, 1056, 33 이라는 숫자가 보입니다.
  • 해당 숫자가 의미하는것이 무엇인지에 대해서 알아 보겠습니다.
Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #
=================================================================
 dense (Dense)               (None, 32)                64

 dense_1 (Dense)             (None, 32)                1056

 dense_2 (Dense)             (None, 1)                 33

=================================================================
Total params: 1,153
Trainable params: 1,153
Non-trainable params: 0

param 이란?

  • param은 parameter 의 약자입니다.
  • 그런데 입력이 1개이고, 출력이 32개라면 1*32=32 이므로 파마미터가 32가 아닌가? 생각할 수 있습니다.
  • 하지만, 첫 번째 레이어의 파라미터는 32가 아닌 64입니다.
  • 먼저 이 부분을 이해하려면 1차 함수 식을 다시 보겠습니다.
y = ax + b
  • 딥러닝에서는 위 식을 약간 다르게 표현합니다.
y = wx + b
h(x) = wx + b
  • 지금까지 모델링을 할 때 노드의 개수에 영향을 준 것은 x와 y뿐이었습니다.
  • 위 식을 보게 되면 b(bias, 절편) 이 있습니다.
  • bias 값은 현재까지의 소스에서는 큰 영향력을 끼치지 않고 있으나, 머신러닝 딥러닝 훈련을 하면서 이 값을 잊지 않고 있었던 겁ㄴ디ㅏ.
  • 머신은 딥러닝을 할 때 바이어스도 1개의 노드로 계산합니다.
  • 즉 bias 값을 포함하여 param 계산하는 식은 다음과 같습니다.
1st hidden layer params = (input(1) + bias(1)) * output(32)
                        = (1 + 1) * 32 = 64

2st hidden layer params = (input(32) + bias(1)) * output(32)
                        = (32 + 1) * 32 = 1056

output hidden layer params = (input(32) + bias(1)) * output(1)
                           = (32 + 1) * 1 = 33
  • 위와 같이 param 값들이 계산 되게 됩니다.
728x90

이 글을 공유하기

댓글

Designed by JB FACTORY