Transfer Learning: Tulip with 5 vs 6 petals

petals=

MobileNet loading...
Use mouse to control 3D model (mouse wheel will zoom it). Set new number of petals (5 or 6). See details in console.

The script generates 300 pairs of randomly rotated procedural tulips with 5 and 6 petals (corresponding predictions 0 or 1). MobileNet (~15 MB of weights) is used to get a 1024 features map (embeddings) from a 224x224 image. The script collects embeddings in a dataset and trains one perceptron (just 1024 weights) for 30 epochs. It all takes a few minutes (HP laptop with Ryzen 5 3500U).

This simple demo counts petals surprisingly well (much faster than me)!

It is based on TensorFlow.js Example: Transfer Learning to play Pacman via the Webcam. It uses a small neural network on the top of MobileNet_v1_1.0_224

  gl.drawElements(gl.TRIANGLES, di - di1, gl.UNSIGNED_INT, 4*di1)
  const embedding = await mobilenet.infer(cnv, true);
  const predictions = model.predict(embedding);
with 1 dense layer
  async function train() {
    model = tf.sequential({
      layers: [
        tf.layers.dense({
          inputShape: [1024],  units: 1,  activation: 'sigmoid',
          kernelInitializer: 'varianceScaling',  useBias: true
        })
      ]
    });
    const optimizer = tf.train.adam(.01);
    model.compile({optimizer: optimizer, loss: 'binaryCrossentropy'});
    const batchSize = 32;
    model.fit(xs, ys, {
      batchSize,
      epochs: 40,  //    shuffle: true,
      callbacks: {
        onEpochEnd: async (epoch, logs) => {
          console.log(epoch + ' Loss: ' + logs.loss.toFixed(5));
        }
      }
    });
  }
Embeddings from MobileNet (x below) are collected in Dataset for training.
async function data(x){
  const dx = await x.data();
  dataset.set(dx, dataPos);
  dataPos += 1024;
  x.dispose();
}

Dataset with WebGL procedural flowers

It is not difficult to make on fly dataset with 1000000 flowers (rose, tulip, daisy × different colors × textures × ages × petal numbers × 3 rotations × scaling × translations ...)

See WebGL procedural flowers. They are not very natural yet. Any suggestions (or gardeners :) ?
TFjs notesupdated 15 Jan 2020