次は、ゼロから構築しようとすると相当な知識と経験が必要になる、「適切な」モデルの作成です。機械学習やディープラーニングでは、モデルが自動的に学習し、推論を立ててくれますが、そこまで行くには、優秀なモデルを人間が試行錯誤して構築する必要があります。
次のコードのモデルは、TensFlow.JSのIrisサンプルで使用されているものです。あやめデータは有名なデータセットなので、これ以外にも優秀なモデルがほかにも多く存在するでしょう。
// モデルの構築
const buildModel = async() => {
// TensFlow.JSのIrisサンプルで使用されているモデル
// https://github.com/tensorflow/tfjs-examples/tree/master/iris
const model = tf.sequential();
model.add(tf.layers.dense({
units: 10,
activation: 'sigmoid',
inputShape: [2]
}));
// 出力は2クラス
model.add(tf.layers.dense({
units: 2,
activation: 'softmax'
}));
const learningRate = 0.01;
const optimizer = tf.train.adam(learningRate);
model.compile({
optimizer: optimizer,
// 二値交差エントロピー誤差関数 categoricalCrossentropyをbinaryCrossentropyに変えている
loss: 'binaryCrossentropy',
metrics: ['accuracy'],
});
return model;
}
モデルの中身はいよいよ複雑になってきたように見えます。
TensFlow.JSのIrisサンプルでは、model.compile()メソッドの引数に指定するオブジェクトのlossプロパティの値にcategoricalCrossentropyが使われています。categoricalCrossentropyは3つ以上の分類に使用される多クラス交差エントロピー誤差関数なので、ここでは、2つの分類に適したbinaryCrossentropyを指定しています。