CNTK & python: как передать входные данные в функцию eval?
С помощью CNTK я создал сеть с 2 входными нейронами и 1 выходным нейроном. Строка в тренировочном файле выглядит так
|features 1.567518 2.609619 |labels 1.000000
Затем сеть обучалась с помощью мозгового скрипта. Теперь я хочу использовать сеть для прогнозирования значений. Например: входные данные [1.82, 3.57]. Что такое выход из сети?
Я пробовал Python со следующим кодом, но здесь я новичок. Код не работает. Поэтому мой вопрос: как передать входные данные [1.82, 3.57] в функцию eval?
На stackru есть некоторые подсказки, здесь и здесь, но это слишком абстрактно для меня.
Спасибо.
import cntk as ct
import numpy as np
z = ct.load_model("LR_reg.dnn", ct.device.cpu())
input_data= np.array([1.82, 3.57], dtype=np.float32)
pred = z.eval({ z.arguments[0] : input_data })
print(pred)
1 ответ
Вот самый защитный способ сделать это. CNTK может быть прощающим, если вы пропустите это, когда сеть указана с помощью конструкций V2. Не уверен насчет сети, которая была создана с кодом V1.
В основном вам нужна пара скоб для каждой оси. Какие оси существуют в Brainscript? Здесь есть пакетная ось, ось последовательности, а затем статические оси вашей сети. У вас есть одномерные данные, поэтому это должно работать:
input_data= np.array([[[1.82, 3.57]]], dtype=np.float32)
Это задает пакет из одной последовательности длиной один, содержащий один 1d вектор из двух элементов. Вы также можете попробовать опустить внешние скобки и посмотреть, получаете ли вы тот же результат.
Обновление на основе дополнительной информации из комментария ниже, мы не должны забывать, что код V1 также сохранил часть сети, которая вычисляет такие вещи, как потери и точность. Если мы предоставляем только функции, CNTK будет жаловаться на то, что этикетки не были предоставлены. Есть два способа решения этой проблемы. Одна возможность состоит в том, чтобы предоставить несколько поддельных меток, чтобы сеть могла оценить эти вспомогательные операции. Другая возможность состоит в том, чтобы определить прогноз и использовать его. Если прогноз был назван "р" в V1, этот код Python
p = z.find_by_name('p')
должен создать функцию CNTK, которая нуждается только в функциях для вычисления прогноза.