6_3 モデルの中身 その2

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に渡します。

モデルの中ではこのようなことが行われています。

コメントを残す

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

CAPTCHA