cntk — программирование синтаксического вопроса при использовании библиотеки CNTK из переполнения стека

Это всего лишь вопрос синтаксиса программирования на С ++ (я думаю). У меня есть 192 плавает в структуре как:

std :: vector outputData (192);

Я хочу вызвать встроенную функцию Softmax в CNTKLibrary для этого вектора 192×1 — документация в заголовочном файле:

/// Создать экземпляр встроенной операции softmax CNTK для указанного тензора входного операнда
CNTK_API FunctionPtr Softmax (постоянная переменная& операнд, const std :: wstring& name = L «»);

Как я могу это сделать? Я предполагаю, что сначала получаю указатель на функцию, а затем применяю его, но я не понимаю, какой будет синтаксис. Что-то вроде этого…

// Захват указателя функции Softmax

FunctionPtr SoftmaxFuncPtr = Softmax (outputData); // как разыграть arg?

// Как оценить этот FuntionPtr?

SoftmaxFuncPtr-> Eval (); // WAG — понятия не имею …

Куда идет результат вычислений?

Спасибо, если вы можете дать мне несколько советов …

0

Решение

Сначала вам нужно определить переменную для ввода Softmax, что-то вроде:

auto inputVar = InputVariable(DimensionsOfInput, DataType::Float, L"InputSoftMax");

Затем вы создаете составную функцию, используя Softmax, как

FunctionPtr SoftmaxFuncPtr = Softmax(inputVar, L"SoftMax");
auto EvalFuncPtr = AsComposite(SoftmaxFuncPtr, L"EvalSoftMax");

После этого создайте карту ввода и вывода, чтобы подготовить данные для оценки, а затем вызовите Forward () или Evaluate (), чтобы выполнить оценку для входных данных и получить результат вывода.

Образец MultiThreadsEvaluationWithNewFunction () в EvalMultithreads.cpp демонстрирует, как создать новую функцию для оценки. страница описывает, как использовать эти образцы. Функция содержит несколько слоев и поддерживает оценку с использованием многопоточности, поэтому может иметь некоторый код, который не требуется для вашего случая. В этом примере все еще используются низкоуровневые API для управления входными и выходными данными, и у нас также есть высокоуровневые удобные методы, такие как Value :: CreateBatch / Sequence / BatchOfSequence (), Value :: CopyVariableValueTo (), чтобы помочь вам подготовить ввод / вывод данных, не зная деталей низкого уровня. CNTKLibrary.h также имеет описание этих APIS.

Пожалуйста, дайте нам знать любые ваши вопросы.
Спасибо,

1

Другие решения

Других решений пока нет …