Imag eNet Классификация: np.testing.assert_almost_equal (pred_probas.sum (). Asscalar (), 1, десятичный = 5) - PullRequest
0 голосов
/ 10 апреля 2020

Для классификации изображений в M xnet с использованием модели GluonCV я использую преобразованное изображение по сети, чтобы получить прогнозируемые вероятности для всех классов Imag eNet.

def predict_probabilities(network, data):
    """
    Should return the predicted probabilities of ImageNet classes for the given image.

    :param network: pre-trained image classification model
    :type network: mx.gluon.Block
    :param data: batch of transformed images of shape (1, 3, 224, 224)
    :type data: mx.nd.NDArray

    :return: array of probabilities of shape (1000,)
    :rtype: mx.nd.NDArray
    """
    # YOUR CODE HERE
    data=transform_image("")
    pred_probas= network(data)
    pred_probas=pred_probas[0]
    return pred_probas

Я должен удовлетворить эти утверждения:

assert pred_probas.shape == (1000,)
np.testing.assert_almost_equal(pred_probas.sum().asscalar(), 1, decimal=5)
assert pred_probas.dtype == np.float32

Хотя я получаю эту ошибку:

AssertionError                            Traceback (most recent call last)
<ipython-input-10-70779066d528> in <module>
      1 pred_probas =
predict_probabilities(network, transformed_test_output)
      2 assert
pred_probas.shape == (1000,)
----> 3
np.testing.assert_almost_equal(pred_probas.sum().asscalar(), 1, decimal=5)
4 assert pred_probas.dtype == np.float32

/usr/local/lib/python3.7/dist-
packages/numpy/testing/_private/utils.py in assert_almost_equal(actual, desired,
decimal, err_msg, verbose)
    599         pass
    600     if abs(desired -
actual) >= 1.5 * 10.0**(-decimal):
--> 601         raise
AssertionError(_build_err_msg())
    602 
    603 

AssertionError: 
Arrays are
not almost equal to 5 decimals
 ACTUAL: 314.64026
 DESIRED: 1

Как мне преодолеть это?

1 Ответ

0 голосов
/ 25 апреля 2020

После того, как вы выполните прямую передачу данных изображения через предварительно обученную сеть, т. Е. pred_probas= network(data)

Вы должны отобразить прогнозируемые значения на вероятность с помощью softmax

prob = mx.nd.softmax(pred_probas)

, а затем return prob [0]

Поскольку применяется softmax, выходы будут в диапазоне 0: 1, и, следовательно, ваш np.testing.assert_almost_equal(pred_probas.sum().asscalar(), 1, decimal=5) будет удовлетворен, так как pred_probas.sum().asscalar() будет почти равен 1

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