1. 소개
TensorFlow.js를 처음 사용해 보거나 사전 제작된 모델을 사용해 보거나 직접 모델을 만들어 보셨을 수도 있습니다. 하지만 Python에서 최첨단 연구가 진행되는 것을 보고 웹브라우저에서 실행하여 수백만 명의 사용자가 확장 가능한 방식으로 멋진 아이디어를 현실로 만들 수 있는지 궁금해졌습니다. 낯설지 않은 이야기인가요? 그렇다면 이 Codelab이 적합합니다.
TensorFlow.js 팀에서는 명령줄 변환기를 통해 SavedModel 형식의 모델을 TensorFlow.js로 변환할 수 있는 편리한 도구를 만들어 웹의 도달 범위와 확장성을 갖춘 모델을 사용할 수 있도록 했습니다.
학습할 내용
이 코드 랩에서는 TensorFlow.js 명령줄 변환기를 사용하여 Python에서 생성된 SavedModel을 웹브라우저의 클라이언트 측에서 실행하는 데 필요한 model.json 형식으로 포팅하는 방법을 알아봅니다.
구체적인 내용은 다음과 같습니다.
- 간단한 Python ML 모델을 만들고 TensorFlow.js 변환기에 필요한 형식으로 저장하는 방법
- Python에서 내보낸 SavedModel에 TensorFlow.js 변환기를 설치하고 사용하는 방법
- 변환된 결과 파일을 가져와 JS 웹 애플리케이션에서 사용합니다.
- 문제가 발생했을 때 (일부 모델은 변환되지 않음) 취해야 할 조치와 사용할 수 있는 옵션을 알아봅니다.
새로 발표된 연구를 활용하여 전 세계 수백만 명의 JS 개발자가 사용할 수 있는 모델을 만들 수 있다고 상상해 보세요. 또는 복잡한 종속 항목이나 환경 설정이 필요하지 않으므로 웹브라우저에서 실행되는 경우 전 세계 누구나 경험할 수 있는 자체 제작에 이를 사용할 수도 있습니다. 해킹할 준비가 되셨나요? 시작하기
변환한 내용을 공유해 주세요.
오늘 배운 내용을 바탕으로 Python에서 좋아하는 모델을 변환해 보세요. 이 작업을 성공적으로 완료하고 모델이 작동하는 데모 웹사이트를 만든 후 소셜 미디어에서 #MadeWithTFJS 해시태그를 사용하여 태그해 주세요. TensorFlow 블로그 또는 향후 Show & Tell 이벤트에서 여러분의 프로젝트가 추천될 수 있습니다. 더 많은 놀라운 연구가 웹으로 포팅되어 더 많은 사람들이 이 훌륭한 예와 같이 혁신적이거나 창의적인 방식으로 이러한 모델을 사용할 수 있기를 바랍니다.
2. TensorFlow.js란 무엇인가요?

TensorFlow.js는 JavaScript가 실행될 수 있는 모든 곳에서 실행할 수 있는 오픈소스 머신러닝 라이브러리입니다. Python으로 작성된 원래 TensorFlow 라이브러리를 기반으로 하며 JavaScript 생태계를 위해 이 개발자 환경과 API 집합을 다시 만드는 것을 목표로 합니다.
어디에서 사용할 수 있나요?
JavaScript의 이식성을 고려할 때 이제 하나의 언어로 작성하고 다음 플랫폼에서 모두 쉽게 머신러닝을 실행할 수 있습니다.
- 일반 JavaScript를 사용하여 웹브라우저의 클라이언트 측
- Node.js를 사용하는 서버 측 및 Raspberry Pi와 같은 IoT 기기
- Electron을 사용하는 데스크톱 앱
- React Native를 사용하는 기본 모바일 앱
TensorFlow.js는 이러한 각 환경 내에서 여러 백엔드 (예: CPU 또는 WebGL과 같이 실행할 수 있는 실제 하드웨어 기반 환경)도 지원합니다. 이 맥락에서 '백엔드'는 서버 측 환경을 의미하지 않습니다. 실행을 위한 백엔드는 예를 들어 WebGL의 클라이언트 측일 수 있습니다. 호환성을 보장하고 빠르게 실행되도록 하기 위해서입니다. 현재 TensorFlow.js는 다음을 지원합니다.
- 기기의 그래픽 카드 (GPU)에서 WebGL 실행 - GPU 가속을 사용하여 더 큰 모델 (크기 3MB 이상)을 실행하는 가장 빠른 방법입니다.
- CPU에서 Web Assembly (WASM) 실행: 예를 들어 이전 세대 휴대전화를 비롯한 여러 기기에서 CPU 성능을 개선합니다. 이는 그래픽 프로세서에 콘텐츠를 업로드하는 오버헤드로 인해 WebGL보다 WASM에서 CPU로 더 빠르게 실행할 수 있는 소규모 모델 (크기 3MB 미만)에 더 적합합니다.
- CPU 실행 - 다른 환경을 사용할 수 없는 경우 대체해야 합니다. 세 가지 방법 중 가장 느리지만 항상 사용할 수 있습니다.
참고: 실행할 기기를 알고 있다면 이러한 백엔드 중 하나를 강제할 수 있습니다. 이를 지정하지 않으면 TensorFlow.js가 자동으로 결정합니다.
클라이언트 측 슈퍼 파워
클라이언트 시스템의 웹브라우저에서 TensorFlow.js를 실행하면 고려해 볼 만한 여러 이점이 있습니다.
개인 정보 보호
데이터를 서드 파티 웹 서버로 전송하지 않고도 클라이언트 머신에서 데이터를 학습시키고 분류할 수 있습니다. 예를 들어 GDPR과 같은 현지 법규를 준수해야 하거나 사용자가 기기에 보관하고 서드 파티에 전송하지 않기를 원하는 데이터를 처리하는 경우 이러한 요구사항이 있을 수 있습니다.
속도
원격 서버로 데이터를 전송하지 않아도 되므로 추론 (데이터 분류 행위)이 더 빨라질 수 있습니다. 사용자가 액세스 권한을 부여하면 카메라, 마이크, GPS, 가속도계 등 기기의 센서에 직접 액세스할 수 있습니다.
도달범위 및 확장성
전 세계 누구나 내가 보낸 링크를 클릭하고 브라우저에서 웹페이지를 열어 내가 만든 것을 활용할 수 있습니다. 머신러닝 시스템을 사용하기 위해 CUDA 드라이버 등이 포함된 복잡한 서버 측 Linux 설정을 할 필요가 없습니다.
비용
서버가 없다는 것은 HTML, CSS, JS, 모델 파일을 호스팅하는 CDN에만 비용을 지불하면 된다는 의미입니다. CDN 비용은 서버 (그래픽 카드가 연결되어 있을 수 있음)를 24시간 연중무휴로 실행하는 것보다 훨씬 저렴합니다.
서버 측 기능
TensorFlow.js의 Node.js 구현을 활용하면 다음 기능을 사용할 수 있습니다.
전체 CUDA 지원
서버 측에서는 그래픽 카드 가속을 위해 NVIDIA CUDA 드라이버를 설치하여 TensorFlow가 그래픽 카드와 함께 작동하도록 해야 합니다 (WebGL을 사용하는 브라우저와 달리 설치가 필요하지 않음). 하지만 CUDA를 완전히 지원하면 그래픽 카드의 하위 수준 기능을 최대한 활용하여 학습 및 추론 시간을 단축할 수 있습니다. 성능은 Python TensorFlow 구현과 동일합니다. 둘 다 동일한 C++ 백엔드를 공유하기 때문입니다.
모델 크기
연구의 최첨단 모델의 경우 크기가 기가바이트일 수 있는 매우 큰 모델을 사용할 수 있습니다. 이러한 모델은 현재 브라우저 탭당 메모리 사용량 제한으로 인해 웹브라우저에서 실행할 수 없습니다. 이러한 대형 모델을 실행하려면 모델을 효율적으로 실행하는 데 필요한 하드웨어 사양으로 자체 서버에서 Node.js를 사용하면 됩니다.
IOT
Node.js는 Raspberry Pi와 같은 인기 있는 싱글 보드 컴퓨터에서 지원되므로 이러한 기기에서도 TensorFlow.js 모델을 실행할 수 있습니다.
속도
Node.js는 JavaScript로 작성되어 있으므로 JIT(Just-In-Time) 컴파일의 이점을 누릴 수 있습니다. 즉, Node.js는 런타임에 최적화되므로 특히 전처리 작업을 실행할 때 성능이 향상되는 경우가 많습니다. 이 사례 연구에서 Hugging Face가 Node.js를 사용하여 자연어 처리 모델의 성능을 2배 향상한 방법을 확인할 수 있습니다.
이제 TensorFlow.js의 기본사항, 실행 가능 위치, 몇 가지 이점을 이해했으니 유용한 작업을 시작해 보겠습니다.
3. 시스템 설정
이 튜토리얼에서는 많은 사용자가 사용하고 클라우드 기반 가상 머신에서 따라 하려는 경우 Google Cloud Compute Engine에서 기본 이미지로 사용할 수 있는 인기 Linux 배포판인 Ubuntu를 사용합니다.
이 글을 쓰는 시점에는 새 일반 Compute Engine 인스턴스를 만들 때 Ubuntu 18.04.4 LTS 이미지를 선택할 수 있으며, 이 이미지를 사용할 예정입니다. 물론 자체 머신을 사용하거나 원하는 경우 다른 운영체제를 사용할 수도 있지만 시스템 간에 설치 안내와 종속 항목이 다를 수 있습니다.
TensorFlow 설치 (Python 버전)
이제 기존 Python 기반 모델을 변환하려고 할 것입니다. Python에서 'SavedModel' 파일을 내보내려면 'SavedModel'을 아직 다운로드할 수 없는 경우 인스턴스에 Python 버전의 TensorFlow가 설정되어 있어야 합니다.
위에서 만든 클라우드 머신에 SSH로 연결한 다음 터미널 창에 다음을 입력합니다.
터미널 창:
sudo apt update
sudo apt-get install python3
이렇게 하면 머신에 Python 3이 설치됩니다. TensorFlow를 사용하려면 Python 3.4 이상이 설치되어 있어야 합니다.
올바른 버전이 설치되었는지 확인하려면 다음을 입력합니다.
터미널 창:
python3 --version
버전 번호(예: Python 3.6.9)를 나타내는 출력이 표시됩니다. 이 값이 올바르게 출력되고 3.4보다 높으면 계속 진행할 수 있습니다.
다음으로 Python의 패키지 관리자인 Python 3용 PIP를 설치한 후 업데이트합니다. 유형:
터미널 창:
sudo apt install python3-pip
pip3 install --upgrade pip
다음과 같이 pip3 설치를 다시 확인할 수 있습니다.
터미널 창:
pip3 --version
이 명령어를 실행하면 작성 시점에 터미널에 pip 20.2.3가 인쇄됩니다.
TensorFlow를 설치하려면 Python 패키지 'setuptools'가 버전 41.0.0 이상이어야 합니다. 다음 명령어를 실행하여 최신 버전으로 업데이트되었는지 확인합니다.
터미널 창:
pip3 install -U setuptools
이제 Python용 TensorFlow를 설치할 수 있습니다.
터미널 창:
pip3 install tensorflow
완료되기까지 다소 시간이 걸릴 수 있으므로 실행이 완료될 때까지 기다려 주세요.
TensorFlow가 올바르게 설치되었는지 확인해 보겠습니다. 현재 디렉터리에 test.py이라는 Python 파일을 만듭니다.
터미널 창:
nano test.py
nano가 열리면 설치된 TensorFlow 버전을 출력하는 Python 코드를 작성할 수 있습니다.
test.py:
import tensorflow as tf
print(tf.__version__)
CTRL + O를 눌러 변경사항을 디스크에 쓰고 CTRL + X를 눌러 nano 편집기를 종료합니다.
이제 이 Python 파일을 실행하여 화면에 출력된 TensorFlow 버전을 확인할 수 있습니다.
터미널 창:
python3 test.py
이 글을 작성하는 시점에 설치된 TensorFlow Python 버전의 경우 콘솔에 2.3.1이 출력됩니다.
4. Python 모델 만들기
이 Codelab의 다음 단계에서는 간단한 Python 모델을 만들어 학습된 모델을 'SavedModel' 형식으로 저장한 후 TensorFlow.js 명령줄 변환기와 함께 사용하는 방법을 보여줍니다. 변환하려는 Python 모델에도 원리는 비슷하지만 모든 사람이 이해할 수 있도록 이 코드를 간단하게 유지하겠습니다.
첫 번째 섹션에서 만든 test.py 파일을 수정하고 코드를 다음과 같이 업데이트합니다.
test.py:
import tensorflow as tf
print(tf.__version__)
# Import NumPy - package for working with arrays in Python.
import numpy as np
# Import useful keras functions - this is similar to the
# TensorFlow.js Layers API functionality.
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense
# Create a new dense layer with 1 unit, and input shape of [1].
layer0 = Dense(units=1, input_shape=[1])
model = Sequential([layer0])
# Compile the model using stochastic gradient descent as optimiser
# and the mean squared error loss function.
model.compile(optimizer='sgd', loss='mean_absolute_error')
# Provide some training data! Here we are using some fictional data
# for house square footage and house price (which is simply 1000x the
# square footage) which our model must learn for itself.
xs = np.array([800.0, 850.0, 900.0, 950.0, 980.0, 1000.0, 1050.0, 1075.0, 1100.0, 1150.0, 1200.0, 1250.0, 1300.0, 1400.0, 1500.0, 1600.0, 1700.0, 1800.0, 1900.0, 2000.0], dtype=float)
ys = np.array([800000.0, 850000.0, 900000.0, 950000.0, 980000.0, 1000000.0, 1050000.0, 1075000.0, 1100000.0, 1150000.0, 1200000.0, 1250000.0, 1300000.0, 1400000.0, 1500000.0, 1600000.0, 1700000.0, 1800000.0, 1900000.0, 2000000.0], dtype=float)
# Train the model for 500 epochs.
model.fit(xs, ys, epochs=500, verbose=0)
# Test the trained model on a test input value
print(model.predict([1200.0]))
# Save the model we just trained to the "SavedModel" format to the
# same directory our test.py file is located.
tf.saved_model.save(model, './')
이 코드는 제공된 x (입력)와 y (출력) 간의 관계를 추정하도록 매우 간단한 선형 회귀를 학습시킵니다. 그런 다음 학습된 모델을 디스크에 저장합니다. 각 줄이 하는 일에 대한 자세한 내용은 인라인 주석을 확인하세요.
이 프로그램을 실행한 후 디렉터리를 확인하면 (python3 test.py 호출) 현재 디렉터리에 새 파일과 폴더가 생성된 것을 확인할 수 있습니다.
- test.py
- saved_model.pb
- 애셋
- variables
이제 TensorFlow.js 변환기에서 이 모델을 브라우저에서 실행할 수 있도록 변환하는 데 필요한 파일이 생성되었습니다.
5. SavedModel을 TensorFlow.js 형식으로 변환
TensorFlow.js 변환기 설치
변환기를 설치하려면 다음 명령어를 실행합니다.
터미널 창:
pip3 install tensorflowjs
간단하네요.
위에서 본 마법사 버전이 아닌 명령줄 변환기 (tensorflowjs_converter)를 사용한다고 가정하면 다음 명령어를 호출하여 방금 만든 저장된 모델을 변환하고 변환기에 매개변수를 명시적으로 전달할 수 있습니다.
터미널 창:
tensorflowjs_converter \
--input_format=keras_saved_model \
./ \
./predict_houses_tfjs
무슨 일이야? 먼저 방금 설치한 tensorflowjs_converter 바이너리를 호출하고 Keras 저장 모델을 변환하려고 한다고 지정합니다.
위의 예시 코드에서 Keras를 가져와 상위 수준 레이어 API를 사용하여 모델을 만든 것을 확인할 수 있습니다. Python 코드에서 Keras를 사용하지 않은 경우 다른 입력 형식을 사용하는 것이 좋습니다.
- keras - keras 형식 (HDF5 파일 유형)을 로드합니다.
- tf_saved_model - Keras 대신 TensorFlow 핵심 API를 사용하는 모델을 로드합니다.
- tf_frozen_model - 고정된 가중치가 포함된 모델을 로드합니다.
- tf_hub - TensorFlow Hub에서 생성된 모델을 로드합니다.
여기에서 다른 형식에 대해 자세히 알아볼 수 있습니다.
다음 두 매개변수는 저장된 모델이 있는 폴더를 지정합니다. 위의 데모에서는 현재 디렉터리를 지정한 다음 변환을 출력할 디렉터리를 지정합니다. 위에서는 현재 디렉터리의 'predict_houses_tfjs'이라는 폴더로 지정했습니다.
위 명령어를 실행하면 현재 디렉터리에 :을 포함하는 predict_houses_tfjs이라는 새 폴더가 생성됩니다.
- model.json
- Group1-shard1of1.bin
웹브라우저에서 모델을 실행하는 데 필요한 파일입니다. 다음 섹션에서 사용할 것이므로 이러한 파일을 저장합니다.
6. 브라우저에서 변환된 모델 사용
변환된 파일 호스팅
먼저 웹페이지를 통해 액세스할 수 있도록 웹 서버에 생성된 model.json 및 *.bin 파일을 배치해야 합니다. 이 데모에서는 따라하기 쉬운 Glitch.com을 사용합니다. 하지만 웹 엔지니어링 경험이 있다면 현재 Ubuntu 서버 인스턴스에서 간단한 http 서버를 실행하여 이 작업을 대신할 수 있습니다. 선택은 사용자님의 몫입니다.
Glitch에 파일 업로드하기
- Glitch.com에 로그인합니다.
- 이 링크를 사용하여 상용구 TensorFlow.js 프로젝트를 클론합니다. 여기에는 TensorFlow.js 라이브러리를 가져와 사용할 준비가 된 스켈레톤 html, css, js 파일이 포함되어 있습니다.
- 왼쪽 패널에서 'assets' 폴더를 클릭합니다.
- '애셋 업로드'를 클릭하고 이 폴더에 업로드할
group1-shard1of1.bin파일을 선택합니다. 업로드하면 다음과 같이 표시됩니다.
- 방금 업로드한
group1-shard1of1.bin파일을 클릭하면 해당 위치의 URL을 복사할 수 있습니다. 지금 이 경로를 다음과 같이 복사합니다.
- 이제 로컬 머신에서 즐겨 사용하는 텍스트 편집기를 사용하여
model.json를 편집하고 그 안에 언급된group1-shard1of1.bin파일을 검색합니다 (CTRL+F 사용).
이 파일 이름을 5단계에서 복사한 URL로 바꾸되, 복사한 경로에서 글리치가 생성하는 선행 https://cdn.glitch.com/을 삭제합니다.
수정 후에는 다음과 같이 표시됩니다 (결과적으로 업로드된 파일 이름만 유지되도록 선행 서버 경로가 삭제됨).
7. 이제 이 수정된 model.json 파일을 저장하고 Glitch에 업로드합니다. 애셋을 클릭한 다음 '애셋 업로드' 버튼을 클릭합니다(중요). 물리적 버튼을 사용하지 않고 드래그 앤 드롭하면 CDN 대신 수정 가능한 파일로 업로드되므로 TensorFlow.js가 지정된 모델의 바이너리 파일을 다운로드하려고 할 때 동일한 폴더에 있지 않으며 상대 경로가 가정됩니다. 올바르게 완료했다면 assets 폴더에 다음과 같이 두 개의 파일이 표시됩니다. 
좋습니다. 이제 저장된 파일을 브라우저의 실제 코드와 함께 사용할 준비가 되었습니다.
모델 로드
변환된 파일을 호스팅했으므로 이제 이러한 파일을 로드하고 이를 사용하여 예측을 수행하는 간단한 웹페이지를 작성할 수 있습니다. Glitch 프로젝트 폴더에서 script.js을 열고, Glitch에 업로드한 model.json 파일의 생성된 Glitch.com 링크를 가리키도록 const MODEL_URL을 변경한 후 이 파일의 내용을 다음과 같이 바꿉니다.
script.js:
// Grab a reference to our status text element on the web page.
// Initially we print out the loaded version of TFJS.
const status = document.getElementById('status');
status.innerText = 'Loaded TensorFlow.js - version: ' + tf.version.tfjs;
// Specify location of our Model.json file we uploaded to the Glitch.com CDN.
const MODEL_URL = ‘YOUR MODEL.JSON URL HERE! CHANGE THIS!';
// Specify a test value we wish to use in our prediction.
// Here we use 950, so we expect the result to be close to 950,000.
const TEST_VALUE = 950.0
// Create an asynchronous function.
async function run() {
// Load the model from the CDN.
const model = await tf.loadLayersModel(MODEL_URL);
// Print out the architecture of the loaded model.
// This is useful to see that it matches what we built in Python.
console.log(model.summary());
// Create a 1 dimensional tensor with our test value.
const input = tf.tensor1d([TEST_VALUE]);
// Actually make the prediction.
const result = model.predict(input);
// Grab the result of prediction using dataSync method
// which ensures we do this synchronously.
status.innerText = 'Input of ' + TEST_VALUE +
'sqft predicted as $' + result.dataSync()[0];
}
// Call our function to start the prediction!
run();
MODEL_URL 상수가 model.json 경로를 가리키도록 변경한 후 위의 코드를 실행하면 아래와 같은 출력이 표시됩니다.

웹브라우저의 콘솔을 검사하면 (F12를 눌러 브라우저에서 개발자 도구 표시) 로드된 모델의 모델 설명도 확인할 수 있습니다.

이를 이 Codelab 시작 시의 Python 코드와 비교하면 1개의 밀도 있는 입력과 1개의 노드가 있는 밀도 있는 레이어로 만든 네트워크와 동일함을 확인할 수 있습니다.
축하합니다. 변환된 Python 학습 모델을 웹브라우저에서 실행했습니다.
7. 변환되지 않는 모델
덜 일반적인 작업을 사용하도록 컴파일되는 더 복잡한 모델은 변환이 지원되지 않는 경우가 있습니다. 브라우저 기반 버전의 TensorFlow.js는 TensorFlow를 완전히 다시 작성한 것이므로 현재 TensorFlow C++ API에 있는 모든 하위 수준 작업 (수천 개)을 지원하지는 않습니다. 하지만 시간이 지남에 따라 성장하고 핵심 작업이 더 안정화되면서 더 많은 작업이 추가되고 있습니다.
이 글을 작성하는 시점에서 저장된 모델로 내보낼 때 지원되지 않는 작업을 생성하는 TensorFlow Python의 함수 중 하나는 linalg.diag입니다. 결과 연산을 지원하는 Python에서 이를 사용하는 savedmodel을 변환하려고 하면 아래와 유사한 오류가 표시됩니다.

여기에서 linalg.diag 호출이 컴파일되어 MatrixDiagV3라는 작업을 생성한 것을 빨간색으로 강조 표시할 수 있습니다. 이 Codelab을 작성할 당시에는 웹브라우저에서 TensorFlow.js가 MatrixDiagV3을 지원하지 않았습니다.
어떻게 해야 하나요?
다음 두 가지 옵션이 있습니다.
- TensorFlow.js에서 이 누락된 작업을 구현하세요. TensorFlow.js는 오픈소스 프로젝트이며 새 작업과 같은 기여를 환영합니다. TensorFlow.js의 새 작업 작성에 관한 가이드를 확인하세요. 이 작업을 수행할 수 있는 경우 명령줄 변환기에서
Skip_op_check플래그를 사용하여 이 오류를 무시하고 변환을 계속할 수 있습니다. 그러면 누락된 작업이 지원되는 TensorFlow.js 빌드의 새 빌드에서 이 작업을 사용할 수 있다고 가정합니다. - 내보낸
savedmodel파일에서 지원되지 않는 작업을 생성한 Python 코드 부분을 확인합니다. 작은 코드 집합에서는 쉽게 찾을 수 있지만, 더 복잡한 모델에서는 현재savedmodel파일 형식에 있는 특정 작업을 생성한 상위 Python 함수 호출을 식별하는 방법이 없으므로 상당한 조사가 필요할 수 있습니다. 하지만 위치를 파악한 후에는 지원되는 다른 방법을 사용하도록 변경할 수 있습니다.
8. 축하합니다
수고하셨습니다. 웹브라우저에서 TensorFlow.js를 통해 Python 모델을 사용하는 첫 단계를 완료했습니다.
요약
이 Codelab에서는 다음을 수행하는 방법을 배웠습니다.
- Python 기반 TensorFlow를 설치하도록 Linux 환경 설정
- Python 'SavedModel' 내보내기
- TensorFlow.js 명령줄 변환기 설치
- TensorFlow.js 명령줄 변환기를 사용하여 필요한 클라이언트 측 파일을 만듭니다.
- 생성된 파일을 실제 웹 애플리케이션에서 사용
- 전환되지 않는 모델과 향후 전환을 허용하기 위해 구현해야 하는 사항을 파악합니다.
다음 단계
소셜 미디어에 추천되거나 향후 TensorFlow 이벤트에서 시연되는 기회를 얻으려면 #MadeWithTFJS를 사용하여 자신이 만든 모든 내용을 태그해 주세요. 브라우저에서 클라이언트 측으로 변환하여 사용하는 내용을 보여주세요.