model = {
const model = tf.sequential();
model.add(tf.layers.reshape({ targetShape: [28, 28, 1], inputShape: [784] }));
model.add(
tf.layers.conv2d({
kernelSize: 3,
filters: 16,
activation: "relu",
kernelInitializer: "varianceScaling"
})
);
model.add(tf.layers.maxPooling2d({ poolSize: [2, 2], strides: [2, 2] }));
model.add(
tf.layers.conv2d({
kernelSize: 3,
filters: 32,
activation: "relu",
kernelInitializer: "varianceScaling"
})
);
model.add(tf.layers.maxPooling2d({ poolSize: [2, 2], strides: [2, 2] }));
model.add(tf.layers.flatten());
model.add(
tf.layers.dense({
units: 64,
activation: "relu",
kernelInitializer: "varianceScaling"
})
);
model.add(tf.layers.dropout({ rate: 0.25 }));
model.add(
tf.layers.dense({
units: 10,
activation: "softmax",
kernelInitializer: "varianceScaling"
})
);
model.compile({
optimizer: tf.train.adam(0.0005),
loss: "categoricalCrossentropy",
metrics: ["accuracy"]
});
return model;
}