3_1_1 データの取得

機械学習はデータの取得から始まります。データは今の場合、[-1, 0, 1, 2, 3, 4]という配列と、[-3, -1, 1, 3, 5, 7]という配列です。これを、

const [xs, ys] = await getData();

というコードで取得しています。この例のデータは簡単な配列ですが、機械学習のデータは通常、もっと巨大で外部にあります。多くの場合、相応の時間がかかるので、取得が終わるまで、待つ必要があります。その待機をここでは、JavaScriptの新しい機能であるawait関数async式で行っています。

// データを取得する。データは多くの場合外部にある。
const getData= async()=>{
  // 訓練用データ
  const trainData = tf.tensor2d([-1, 0, 1, 2, 3, 4], [6, 1]);
  // 教師用データ
  const labelData = tf.tensor2d([-3, -1, 1, 3, 5, 7], [6, 1]);
  return [trainData, labelData];
}

データには2種類あり、訓練する方は訓練用データと呼ばれます。これは今の場合、y = 2x -1のxに代入される数値に当たります。もう1つは、教師用データ、ラベルデータと呼ばれ、今の場合、y = 2x -1 のyに当たります。

TensorFlow.jsの身になって言うと、「訓練用データが-1のとき教師用データは-3で、0のとき-1、1のとき1、2のとき3、3のとき4、4のとき7かあ。これらをうまく満たす係数は何だろう」と考えるわけです(無論、実際に考えたりはしません。舞台裏では面倒な計算を高速で行っています)。

tf.tensor2d()は、数学の行列に当たるJavaScriptの2次元配列を持つtf.Tensorオブジェクトを作成するメソッドです。引数に[-1, 0, 1, 2, 3, 4]と[6, 1]を与えると、
[[-1], [0 ], [1 ], [2 ], [3 ], [4 ]]という配列を持つtf.Tensorオブジェクトを返します。

tf.TensorはTensorFlow.jsの根幹を成すオブジェクトで、コンピュータのGPUによる高速計算に使用されます。たとえばconsole.log(trainData);を実行すると、次の結果が得られます。

[[-1], [0 ], [1 ], [2 ], [3 ], [4 ]]は6行1列の行列に相当します。これは、要素数が1の配列を6個もつJavaScriptの配列です。

tf.Tensorが持っているデータは、tf.Tensorのprint()メソッドでコンソールに出力して調べることができます。

 trainData.print();

教師用データに関しても同様で、tf.tensor2d()を使って、[[-3],[-1],[1 ],[3 ],[5 ],[7 ]]という2次元配列をデータとして持つtf.Tensorオブジェクトを作成し、変数に割り当てています。

getData()関数では、作成した訓練用データと教師用データ用のtf.Tensorオブジェクトを返します。これにより、変数xsとysにそれぞれ、訓練用データと教師用データが割り当てられます。

以上でデータが取得できました。

tf.Tensorオブジェクトは、GPUの中を流れ、機械学習に必要な多量の計算を高速に行うために使用されます。Tensorは日本語ではテンソルと読まれます。テンソルはスカラーやベクトル、行列、それ以上の次元を持つ形式全部を含んだ概念を言いますが、TensorFlow.jsの場合ではJavaScriptの(多次元)配列と見なすことができます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA