TensaflowJS: Ошибка: форма dict ['images'], предоставленная в model.execute (dict), должна быть [-1,224,224,3], но была [400,600,1] - PullRequest
0 голосов
/ 16 октября 2018

Я использую mobilenet нейронную сеть от Google для классификации изображений.Я использую angular 6+ tenorflowJS для создания своего приложения классификатора изображений.

Я пытаюсь выполнить шаги, предусмотренные readme библиотеки tfjs-преобразователя , и я придумал следующеекод:

import * as tf from '@tensorflow/tfjs';
import { FrozenModel } from '@tensorflow/tfjs';

export class NeuronalNetwork {
    private MODEL_PATH: string = 'http://localhost:4200/assets/model/tensorflowjs_model.pb';
    private WEIGHTS_PATH: string = 'http://localhost:4200/assets/model/weights_manifest.json';
    constructor(){}
    async loadModel() {
        const localModel: FrozenModel = (await tf.loadFrozenModel(this.MODEL_PATH, this.WEIGHTS_PATH));
        let image: any = document.getElementById('cat');

        let pixels =  tf.fromPixels(image, 1);
        let result = localModel.predict(pixels);

    }
    async predict(){
        let image: any = document.getElementById('cat');
        debugger;
        this.model.execute({input: tf.fromPixels(image)});
    }

}

Элемент HTML изображения:

<img id="cat" src="http://localhost:4200/assets/images/cat.jpg"/>

Когда я пытаюсь выполнить функцию localModel.predict(pixels), я получаю следующую ошибку:

Uncaught (в обещании): Ошибка: форма dict ['images'], предоставленная в model.execute (dict), должна быть [-1,224,224,3], но была [400,600,1]

Я новичок в технологиях Tensorflow и TensorflowJS.Кто-нибудь знает, что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Встретил ту же проблему, затем нашел решение в Github: Ввод неправильной формы

const img = document.getElementById('myimg');
const tfImg = tf.fromPixels(img);
const smalImg = tf.image.resizeBilinear(tfImg, [368, 432]);
const resized = tf.cast(smalImg, 'float32');
const t4d = tf.tensor4d(Array.from(resized.dataSync()),[1,368,432,3])
0 голосов
/ 25 декабря 2018

Ошибка указывает на несоответствие между формой, определенной в модели, и формой входных данных, передаваемых в модель.Чтобы решить эту проблему, вы должны изменить свой ввод.

Однако использование tf.reshape ввода не будет работать, так как нет целого числа k, такого как k*224*224*3 будет равно 400*600*1.Можно рассмотреть нарезку входного изображения, используя tf.slice , чтобы сохранить только необходимую форму изображения.

const a = tf.randomNormal([400, 600, 3])
// a has shape [400, 600, 3]
// a cannot be reshaped into [224, 224, 3]
// a can be sliced into [224, 224, 3]
const b = a.slice([0, 0, 0], [224, 224, 3])
...