레슨 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는 해당 레이어의 뉴런(노드) 수로, 모델의 학습 용량을 결정합니다.