Learning
레슨 8 / 8·15분

TensorFlow.js 레퍼런스

TensorFlow.js의 주요 API와 자주 사용하는 패턴을 정리한 레퍼런스입니다. 개발 시 빠르게 참고할 수 있도록 카테고리별로 분류하였습니다.

텐서 생성 API

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

// 기본 텐서 생성
tf.tensor([1, 2, 3])              // 1D 텐서
tf.tensor([[1, 2], [3, 4]])       // 2D 텐서
tf.tensor2d([[1, 2], [3, 4]])     // 명시적 2D
tf.scalar(42)                      // 스칼라

// 특수 텐서
tf.zeros([2, 3])                   // 영텐서
tf.ones([3, 3])                    // 1로 채운 텐서
tf.fill([2, 2], 7)                 // 특정 값으로 채우기
tf.linspace(0, 1, 10)             // 균등 분할
tf.range(0, 10, 2)                // [0, 2, 4, 6, 8]
tf.randomNormal([3, 3])           // 정규분포 난수
tf.randomUniform([2, 2])          // 균등분포 난수

// 원-핫 인코딩
tf.oneHot(tf.tensor1d([0, 1, 2], 'int32'), 3)
// [[1, 0, 0], [0, 1, 0], [0, 0, 1]]

텐서 연산 API

javascript
const a = tf.tensor([1, 2, 3]);
const b = tf.tensor([4, 5, 6]);

// 산술 연산
a.add(b)           // 덧셈 [5, 7, 9]
a.sub(b)           // 뺄셈 [-3, -3, -3]
a.mul(b)           // 곱셈 [4, 10, 18]
a.div(b)           // 나눗셈
a.pow(tf.scalar(2)) // 거듭제곱

// 행렬 연산
m1.matMul(m2)      // 행렬 곱
m1.transpose()     // 전치
tf.dot(a, b)       // 내적

// 축소 연산
a.sum()            // 합계
a.mean()           // 평균
a.max()            // 최대값
a.min()            // 최소값
a.argMax()         // 최대값 인덱스

// 형태 변환
a.reshape([1, 3])  // 형태 변경
a.expandDims(0)    // 차원 추가
a.squeeze()        // 크기 1인 차원 제거
a.slice([1], [2])  // 슬라이싱

레이어 종류

  • tf.layers.dense({units, activation}) : 완전 연결 레이어. 가장 기본적인 레이어
  • tf.layers.conv2d({filters, kernelSize}) : 2D 합성곱. 이미지 처리에 사용
  • tf.layers.maxPooling2d({poolSize}) : 최대 풀링. 공간 크기 축소
  • tf.layers.flatten() : 다차원 텐서를 1D로 변환
  • tf.layers.dropout({rate}) : 과적합 방지. 학습 시 뉴런 비활성화
  • tf.layers.batchNormalization() : 배치 정규화. 학습 안정화
  • tf.layers.lstm({units}) : LSTM. 시계열/텍스트 처리
  • tf.layers.gru({units}) : GRU. LSTM의 경량 버전
  • tf.layers.embedding({inputDim, outputDim}) : 임베딩. 단어를 벡터로 변환

옵티마이저와 손실 함수

javascript
// 옵티마이저
tf.train.sgd(learningRate)         // 확률적 경사 하강법
tf.train.adam(learningRate)        // Adam (가장 많이 사용)
tf.train.rmsprop(learningRate)     // RMSProp
tf.train.adagrad(learningRate)     // Adagrad

// 손실 함수 (문자열로 지정)
'meanSquaredError'           // 회귀
'binaryCrossentropy'         // 이진 분류
'categoricalCrossentropy'    // 다중 분류 (원-핫 라벨)
'sparseCategoricalCrossentropy'  // 다중 분류 (정수 라벨)

// 활성화 함수
'relu'       // max(0, x) - 은닉층 기본
'sigmoid'    // 이진 분류 출력층
'softmax'    // 다중 분류 출력층
'tanh'       // -1 ~ 1 범위
'linear'     // 회귀 출력층 (또는 생략)

유용한 유틸리티

javascript
// 메모리 관리
tf.tidy(() => { /* 중간 텐서 자동 해제 */ });
tensor.dispose();               // 수동 해제
tf.disposeVariables();          // 모든 변수 해제
console.log(tf.memory());      // 메모리 사용량 확인

// 데이터 변환
await tensor.data()            // Float32Array로
await tensor.array()           // 중첩 배열로
tensor.dataSync()              // 동기 변환 (주의: 블로킹)

// 이미지 처리
tf.browser.fromPixels(canvas)  // 캔버스/이미지를 텐서로
tf.browser.toPixels(tensor, canvas)  // 텐서를 캔버스로
tf.image.resizeBilinear(img, [h, w]) // 리사이즈

// 백엔드 설정
await tf.setBackend('webgl');   // GPU 가속 (기본)
await tf.setBackend('cpu');     // CPU 폴백
await tf.setBackend('wasm');    // WebAssembly
console.log(tf.getBackend());  // 현재 백엔드 확인
💡

WebGL 백엔드가 기본이지만, 일부 구형 브라우저에서는 CPU 폴백이 발생할 수 있습니다. WASM 백엔드는 WebGL을 지원하지 않는 환경에서 좋은 대안입니다. 항상 tf.memory()로 메모리 누수를 모니터링하세요.