Глубокое обучение - Как я могу проверить учебную модель MNIST на WML?
Это вопрос, связанный с "Watson Studio". Я сделал следующий учебник / помощник по углубленному обучению, успешно развернул сгенерированную модель CNN в WML(WebService). Здорово!
Учебное пособие: один слой свертки на данных MNIST
Помощник эксперимента
Затем я хотел бы проверить, может ли модель идентифицировать мой образ ( MNIST) в развернутой среде, и мне в голову пришли вопросы. Какой тип входного файла (возможно, файл изображения в пикселях) я должен подготовить для ввода модели? Как я могу пнуть конечную точку подсчета очков, передавая мое изображение? (Я видел фрагмент кода Python на вкладке "Реализация", но это пример json и не уверен, как я могу передать пиксельное изображение...)
payload_scoring = {"fields": [array_of_feature_columns], "values": [array_of_values_to_be_scored, another_array_of_values_to_be_scored]}
Любые советы / предложения приветствуются. Спасибо заранее.
1 ответ
Обученная модель принимает входные данные, которые представляют собой массив из 4 измерений, т.е. [<batchsize>, 28, 28, 1]
где 28 относится к высоте и ширине изображения в пикселях, 1 относится к числу каналов. В настоящее время службе онлайн-развертывания и оценки WML требуются данные полезной нагрузки в формате, который соответствует формату ввода модели. Итак, чтобы предсказать любое изображение с этой моделью, вы должны...
- преобразовать изображение в массив размером [1, 28, 28, 1]. Преобразование изображения в массив объясняется в следующем разделе.
- предварительно обработать данные изображения в соответствии с требованиями модели, т.е. выполнить (а) нормализацию данных (б) преобразовать тип в плавающее
- предварительно обработанные данные должны быть указаны в формате json с соответствующими ключами. Этот документ JSON будет входной полезной нагрузкой для запроса оценки для модели.
Как преобразовать изображение в массив? Есть два способа.. (используя код Python)
a) библиотека python keras имеет набор данных MNIST, содержащий изображения MNIST, которые преобразуются в массивы 28 x 28. Используя приведенный ниже код Python, мы можем использовать этот набор данных для создания полезной нагрузки.
import numpy as np
from keras.datasets import mnist
(X, y), (X_test, y_test) = mnist.load_data()
score_payload_data = X_test.reshape(X_test.shape[0], X_test.shape[1], X_test.shape[2], 1)
score_payload_data = score_payload_data.astype("float32")/255
score_payload_data = score_payload_data[2].tolist() ## we are choosing the 2nd image in the list to predict
scoring_payload = {'values': [score_payload_data]}
б) Если у вас есть изображение размером 28 x 28 пикселей, мы можем создать полезную нагрузку, используя код ниже.
img_file_name = "<image file name with full path>"
from scipy import misc
img = misc.imread(img_file_name)
img_to_predict = img.reshape(img.shape[0], img.shape[1], 1)/255
img_to_predict = img_to_predict.astype("float32").tolist()
scoring_payload = {"values": [img_to_predict]}