Как загрузить BufferedImage в качестве входных данных для классификатора в DeepLearning4j? - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь получить обученную сверточную нейронную сеть (CNN) для классификации нового изображения (которое приходит как объект BufferedImage).

Модель CNN была обучена с использованием примера, предоставленного в DeepLearning4j (https://github.com/eclipse/deeplearning4j-examples/blob/master/dl4j-examples/src/main/java/org/deeplearning4j/examples/convolution/mnist/MnistClassifier.java).

Я попытался преобразовать объект BufferedImage в INDArray, который является ожидаемым типом ввода для модели.

public static INDArray classify(BufferedImage image) throws IOException {

    String modelFile = "e:\\c1\\TrainingData\\mnistplus-model.1.zip";
    MultiLayerNetwork classifier = MultiLayerNetwork.load(new File(modelFile), false);

    int channels = 1;
    ImageLoader loader = new ImageLoader(TARGET_WIDTH, TARGET_HEIGHT, channels);
    INDArray input = loader.asMatrix(image);
    INDArray output = classifier.output(input);

    System.out.println(output);
    return output;
}

Однако я получил ошибку, когда входные данные передаются в модель. Похоже, я не правильно инициализировал вход INDArray. Заранее спасибо за любую помощь по этому вопросу.

Исключение внить "основной"(FeedForwardToCnnPreProcessor.java:90) at org.deeplearning4j.nn.multilayer.MultiLayerNetwork.outputOfLayerDetached (MultiLayerNetwork.java:1281)

1 Ответ

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

Вы можете изменить вызов с INDArray input = loader.asMatrix(image); на INDArray input = loader.asMatrix(image).reshape(1, 28, 28, 1);, чтобы получить входной сигнал правильной формы (миниатюра х высота х ширина х каналов)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...