tf.Sequentialのモデルにレイヤーを追加したので、コンパイルに移ります。
const learningRate = 0.01;
const optimizer = tf.train.adam(learningRate);
model.compile({
optimizer: optimizer,
// 二値交差エントロピー誤差関数
loss: 'binaryCrossentropy',
metrics: ['accuracy'],
});return model;
model.compile()メソッドに渡しているオブジェクトのlossプロパティで指定しているのは、損失関数と呼ばれる関数の名前です。損失関数は、モデルに行う訓練中、モデルの「推測」が教師データに対してどれだけかけ離れているかを数値で返します。
モデルは、自分の「推測」を教師データに近づけるため、誤差関数が返す値をできるだけ小さくする必要があります。このできるだけ小さくしようとする方法として適用するのがoptimizerプロパティの値です。
モデルはまず自分の中の変数(重みとバイアス)を設定します。そして入力データをレイヤーに流して計算し、「推測」値を出して、それをlossに渡します。
lossは自分の方法でその「推測」値と正解の教師データと比べて、適合しなさ具合を表す数値を返します。
optimizerは、損失関数に対し、自分の方法で、正解との差が小さくなる方向を割り出します。モデルはその方向に沿って、自分の中の変数の値を調整します。調整の程度はoptimizerに渡すlearningRate(学習率と呼ばれます)で決まります。
変数の値を変えたら、また入力データをレイヤーに流して計算し、「推測値」を出して、lossに渡します。
モデルの中ではこのようなことが行われています。