레슨 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()로 메모리 누수를 모니터링하세요.