Learning
레슨 2 / 8·20분

모델 구축

TensorFlow.js에서 모델은 입력 데이터를 받아 예측을 출력하는 레이어(층)의 조합입니다. tf.sequential()을 사용하면 레이어를 순서대로 쌓아 간단하게 모델을 구축할 수 있습니다.

Sequential 모델 생성

javascript
import * as tf from '@tensorflow/tfjs';

// Sequential 모델: 레이어를 순서대로 쌓는 방식
const model = tf.sequential();

// 첫 번째 레이어에는 반드시 inputShape을 지정
model.add(tf.layers.dense({
  units: 16,            // 뉴런 수
  activation: 'relu',   // 활성화 함수
  inputShape: [4],      // 입력 데이터의 shape (4개 특성)
}));

// 중간 레이어
model.add(tf.layers.dense({
  units: 8,
  activation: 'relu',
}));

// 출력 레이어
model.add(tf.layers.dense({
  units: 3,              // 3개 클래스 분류
  activation: 'softmax', // 확률 분포 출력
}));

활성화 함수

  • relu (Rectified Linear Unit): 음수는 0, 양수는 그대로 출력. 은닉층에서 가장 널리 사용됩니다
  • sigmoid: 출력을 0~1 사이로 압축. 이진 분류의 출력층에 적합합니다
  • softmax: 출력값들의 합이 1이 되는 확률 분포로 변환. 다중 클래스 분류의 출력층에 사용합니다
  • tanh: 출력을 -1~1 사이로 압축. RNN 등에서 사용됩니다
  • linear: 변환 없이 그대로 출력. 회귀 문제의 출력층에 사용합니다

모델 구조 확인

javascript
// 모델 구조 요약 출력
model.summary();
// _________________________________________________________________
// Layer (type)                Output shape              Param #
// =================================================================
// dense_Dense1 (Dense)        [null, 16]                80
// dense_Dense2 (Dense)        [null, 8]                 136
// dense_Dense3 (Dense)        [null, 3]                 27
// =================================================================
// Total params: 243
// Trainable params: 243
// Non-trainable params: 0

// 파라미터 수 = (입력 수 × units) + units(바이어스)
// 첫 번째 레이어: (4 × 16) + 16 = 80

회귀 모델 예시

javascript
// 숫자 하나를 예측하는 회귀 모델
const regressionModel = tf.sequential();

regressionModel.add(tf.layers.dense({
  units: 32,
  activation: 'relu',
  inputShape: [1],  // 입력: 숫자 1개
}));

regressionModel.add(tf.layers.dense({
  units: 1,              // 출력: 숫자 1개
  activation: 'linear',  // 회귀이므로 linear
}));
💡

inputShape는 첫 번째 레이어에만 지정하면 됩니다. 이후 레이어는 이전 레이어의 출력 shape을 자동으로 추론합니다. units는 해당 레이어의 뉴런(노드) 수로, 모델의 학습 용량을 결정합니다.