Внедрение модели Keras на веб-сайт с помощью Keras.js

1

Я пытаюсь реализовать базовую модель Keras, сгенерированную на Python, на веб-сайт, используя библиотеку Keras.js. Теперь у меня есть модель, обученная и экспортированная в model.json, model_weights.buf и model_metadata.json. Теперь я по существу скопировал и вставил тестовый код с страницы github, чтобы посмотреть, будет ли модель загружаться в браузере, но, к сожалению, я получаю ошибки. Вот тестовый код. (EDIT: я исправил некоторые ошибки, см. Ниже для остальных).

var model = new KerasJS.Model({
    filepaths: {
        model: 'dist/model.json',
        weights: 'dist/model_weights.buf',
        metadata: 'dist/model_metadata.json'
  },
  gpu: true
});

    model.ready()
  .then(function() {
    console.log("1");
    // input data object keyed by names of the input layers
    // or 'input' for Sequential models
    // values are the flattened Float32Array data
    // (input tensor shapes are specified in the model config)
    var inputData = {
      'input_1': new Float32Array(data)
    };
    console.log("2 " + inputData);
    // make predictions
    return model.predict(inputData);
  })
  .then(function(outputData) {
    // outputData is an object keyed by names of the output layers
    // or 'output' for Sequential models
    // e.g.,
    // outputData['fc1000']
    console.log("3 " + outputData);
  })
  .catch(function(err) {
    console.log(err);
    // handle error
  });

EDIT: Поэтому я немного изменил свою программу, чтобы быть совместимой с JS 5 (это была глупая ошибка с моей стороны), и теперь я столкнулся с другой ошибкой. Эта ошибка ломается, а затем записывается в журнал. Ошибка, которую я получаю: Error: predict() must take an object where the keys are the named inputs of the model: input. Я считаю, что эта проблема возникает из-за того, что моя переменная data не в правильном формате. Я думал, что если моя модель возьмет массив чисел 28x28, тогда data также должны быть массивом 28x28, чтобы он мог правильно "предсказать" правильный вывод. Тем не менее, я считаю, что я что-то упускаю, и поэтому возникает ошибка. Этот вопрос очень похож на мой, однако он находится в питоне, а не в JS. Опять же, любая помощь будет оценена.

Теги:
keras

1 ответ

0
Лучший ответ

Хорошо, поэтому я понял, почему это происходит. Были две проблемы. Во-первых, массив data должен быть сплющен, поэтому я написал быструю функцию, чтобы взять 2D-вход и "сгладить" его как 1D-массив длиной 784. Тогда, поскольку я использовал модель Sequential, ключевое имя данных не должно было быть 'input_1', а скорее 'input'. Это избавило от всех ошибок.

Теперь, чтобы получить выходную информацию, мы просто можем сохранить ее в таком массиве: var out = outputData['output']. Поскольку я использовал набор данных MNIST, out был 1D массив длиной 10, который содержал вероятности каждой цифры, являющейся пользовательской цифрой. Оттуда вы можете просто найти номер с наивысшей вероятностью и использовать его как предикат для модели.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню