Как использовать модель тензорного потока для обучения и прогнозирования движения мыши? - PullRequest
0 голосов
/ 26 сентября 2019
<html>
<body id='body'>
    <button onclick="StartData(event)"> Start</button>
    <button onclick="getStopCordinates(event)">Stop</button>
    <script>
        let inputs = [];
        let labels = [];
        function Mouse(event) {
            inputs.push({ x: event.clientX, y: event.clientY })
        }
        function StartData() {
            document.getElementById('body').addEventListener("mouseover", Mouse())
        }

        function getStopCordinates(event) {
            labels.push({ x: event.clientX, y: event.clientY })
            document.getElementById('body').removeEventListener("mouseover", Mouse())
        }

    </script>
</body>
</html>

Я использую код выше, чтобы захватить все координаты XY мыши в теле.Когда пользователь перемещает указатель в сторону кнопки остановки, я фиксирую все координаты x, y для этого.и когда пользователь нажимает кнопку остановки, я также фиксирую координаты остановки.Теперь я хочу обучить модель Tensflow Flow JS из захваченных точек, чтобы, когда пользователь перемещает мышь с той же траекторией, я мог предсказать, что он нажмет кнопку остановки.

Код тензорного потока:

 const model = tf.sequential(); 

  // Add a single hidden layer
  model.add(tf.layers.dense({inputShape: [2], units: 1, useBias: true}));

  // Add an output layer
  model.add(tf.layers.dense({units: 1, useBias: true}));

  const inputTensor = tf.tensor2d(inputs, [inputs.length, 1]);
    const labelTensor = tf.tensor2d(labels, [labels.length, 1]);

trainModel(model,inputs,labels)
async function trainModel(model, inputs, labels) {
  // Prepare the model for training.  
  model.compile({
    optimizer: tf.train.adam(),
    loss: tf.losses.meanSquaredError,
    metrics: ['mse'],
  });

  const batchSize = 32;
  const epochs = 50;

  return await model.fit(inputs, labels, {
    batchSize,
    epochs,
    shuffle: true,
    callbacks: tfvis.show.fitCallbacks(
      { name: 'Training Performance' },
      ['loss', 'mse'], 
      { height: 200, callbacks: ['onEpochEnd'] }
    )
  });
}

но этот код выдает ошибку, поскольку входные данные и метки не совпадают, так как исправить этот код для приведенного выше результата?

1 Ответ

0 голосов
/ 27 сентября 2019

Входные данные и метки должны быть массивом массивов, а не массивом объектов.Входные данные должны быть скорее

 [[1, 2], [4, 6], ...]

То же самое относится и к меткам.

Поскольку вы предсказываете 2 значения, последний слой должен иметь количество единиц 2

 const model = tf.sequential(); 

 // Add a single hidden layer
 model.add(tf.layers.dense({inputShape: [2], units: 1, useBias: true}));

 // Add an output layer
 model.add(tf.layers.dense({units: 1, useBias: true}));

Последнее - конечно, не в последнюю очередь - это добавить активацию, чтобы добавить нелинейность в модель

...