TensorFlow.js 예제: tfjs-data

제너레이터 함수에서 tf.data.Dataset 만들기

이 데모를 사용하는 방법

이 데모는 tf.data.generator()로 제너레이터에서 만든 tf.data.Dataset을 사용해 모델을 훈련하는 방법을 보여줍니다. 여기에서는 게임을 이길 가능성을 예측합니다. 이 게임은 아래에 설명되어 있으며 game.js에 구현되어 있습니다. 이 게임은 데이터셋을 만들기 위해 "제너레이터" 함수를 만듭니다. 그다음 model.fitDataset()을 사용해 이 데이터셋에 모델을 훈련합니다. 이 모델의 목표는 플레이어 1이 가진 카드를 사용해 이길 가능성을 예측하는 것입니다. 모델이 이길 것으로 생각하는 카드일 경우 더 높은 확률을 출력합니다.

애플리케이션 사용 방법

  1. 아래 게임 규칙을 숙지하세요.
  2. 게임 시뮬레이션 버튼을 눌러 게임을 수행해 보세요.
  3. 드롭다운 메뉴를 사용해 플레이어의 카드 개수를 선택하세요.
  4. 게임이 어떻게 생성되고 승자를 판단하는지 확인하세요. 증가된 시뮬레이션 카운트를 확인하세요.
  5. 플레이어 1의 카드에서 만든 텐서 기반 특성을 확인하세요.
  6. 데이터셋으로 배열 만들기 버튼을 클릭해 배치 데이터의 형태를 확인하세요.
  7. 모델을 훈련하기 전에 배치 크기, 에포크 당 배치, 훈련할 에포크 수를 선택하세요.
  8. 준비를 마치면 fitDataset으로 모델 훈련하기 버튼을 클릭해 생성한 특성으로 모델을 훈련하세요.
  9. 모델을 훈련하고 난 후 사용자의 카드 값을 입력하고 예측하기 버튼을 클릭합니다.

게임 시뮬레이션

"게임 시뮬레이션"을 클릭해 게임을 실행하면 플레이어마다 세 개의 숫자가 랜덤하게 선택됩니다. "승리" 상태는 다음 규칙에 따라 어떤 플레이어가 이겼는지를 나타냅니다.

규칙:
  • 같은 값을 가진 카드를 많이 가진 플레이어가 이깁니다. 예를 들어 플레이어 1이 한 종류의 카드를 세 개 가지고 있고 플레이어 2는 두 개만 같다면 플레이어 1이 이깁니다.
  • 두 플레이어가 같은 개수의 동일한 카드를 가지고 있다면 더 큰 값을 가진 플레이어가 이깁니다. 예를 들어 5 두 장을 가진 플레이어가 4 두 장을 가진 플레이어를 이깁니다.
  • 두 플레이어가 모두 같은 값을 가진 카드가 없다면 단일 카드 중에 가장 값이 높은 플레이어가 이깁니다.
  • 동점일 경우 랜덤하게 50:50 확률로 승자를 결정합니다.
카드 개수

시뮬레이션 결과 (지금까지 시뮬레이션 횟수 =
0
)

플레이어 1
상대방
승리

게임 특성과 레이블. 플레이어 1이 이기는지 예측하고 싶기 때문에 모델에 주입되는 특성은 플레이어 1의 값만 포함합니다.

특성:
"게임 시뮬레이션" 버튼을 클릭하세요.
레이블:

데이터 파이프라인

tf.dataFromGenerator(simulation↑)

.map(gameToFeaturesAndLabel)

.batch( )

.take( )

.toArray()

모델 훈련과 평가

에포크 당 배치 횟수

훈련 에포크 횟수

예상 시뮬레이션 = 배치 크기 * 에포크 당 배치 횟수 * 에포크 횟수 =

훈련 과정

각 플레이어의 승리 확률이 동일하기 때문에 완전히 단순한 예측기는 0.5의 정확도를 가질 것입니다. 상대방의 카드를 볼 수 없기 때문에 완벽하게 정확한 예측기는 불가능합니다.

훈련된 모델 사용하기

모델 출력:

모델이 이길 것으로 생각하는 카드일 경우 더 높은 확률을 출력하지만 보정된 확률은 아닙니다.