例1モデル


データをシャッフルする

トレーニングの前に必ずデータをシャッフルします。

モデルがトレーニングされると、データは小さなセット(バッチ)に分割されます。次に、各バッチがモデルに送られます。モデルが同じデータを繰り返し取得しないようにするには、シャッフルが重要です。同じデータを2回使用すると、モデルはデータを一般化して適切な出力を提供できなくなります。シャッフルすると、各バッチでより多様なデータが得られます。

tf.util.shuffle(data);

TensorFlowテンソル

TensorFlowを使用するには、入力データをテンソルデータに変換する必要があります。

// Map x values to Tensor inputs
const inputs = values.map(obj => obj.x);
// Map y values to Tensor labels
const labels = values.map(obj => obj.y);

// Convert inputs and labels to 2d tensors
const inputTensor = tf.tensor2d(inputs, [inputs.length, 1]);
const labelTensor = tf.tensor2d(labels, [labels.length, 1]);

データの正規化

ニューラルネットワークで使用する前に、データを正規化する必要があります。

min-maxを使用した0〜1の範囲は、多くの場合、数値データに最適です。

const inputMin = inputTensor.min();
const inputMax = inputTensor.max();
const labelMin = labelTensor.min();
const labelMax = labelTensor.max();
const nmInputs = inputTensor.sub(inputMin).div(inputMax.sub(inputMin));
const nmLabels = labelTensor.sub(labelMin).div(labelMax.sub(labelMin));

Tensorflowモデル

機械学習モデルは、入力から出力を生成するアルゴリズムです

この例では、3行を使用してMLモデルを定義します。

const model = tf.sequential();
model.add(tf.layers.dense({inputShape: [1], units: 1, useBias: true}));
model.add(tf.layers.dense({units: 1, useBias: true}));

シーケンシャルMLモデル

const model = tf.sequential(); シーケンシャルMLモデル を作成します

シーケンシャルモデルでは、入力は直接出力に流れます。他のモデルは、複数の入力と複数の出力を持つことができます。シーケンシャルは最も簡単なMLモデルです。これにより、次のレイヤーに対応する重みを使用して、レイヤーごとにモデルを構築できます。

TensorFlowレイヤー

model.add()は、モデルに2つのレイヤーを追加するために使用されます。

tf.layer.denseは、ほとんどの場合に機能するレイヤータイプです。入力に重み行列を掛けて、結果に数値(バイアス)を追加します。

形状と単位

inputShape:[1]入力が1つあるため(x =馬力)。

単位:1は、重み行列のサイズを定義します:入力ごとに1つの重み(x値)。


モデルのコンパイル

指定されたオプティマイザ損失関数を使用してモデルをコンパイルします。

model.compile({loss: 'meanSquaredError', optimizer:'sgd'});

コンパイラは、sgdオプティマイザを使用するように設定されています。使い方は簡単でとても効果的です。

meanSquaredError は、モデルの予測と真の値を比較するために使用する関数です。