2017-05-01 8 views
0

これは単なるC++のプログラミング構文の質問です(私は思っています)。私は以下のような構造の中に192個の浮動小数点を持っています:C++のCNTKLibraryの使用法に関する質問文

std :: vector outputData(192);

私はこの上CNTKLibraryで、内蔵ソフトマックス関数を呼び出すためには、ベクターを192x1たい - ヘッダ・ファイル内のドキュメントは次のとおりです。

///内蔵のソフトマックスの操作上のCNTKのインスタンスを作成します。指定されたテンソル入力オペランド CNTK_API FunctionPtr Softmax(const変数&オペランド、const std :: wstring &名前= L "");

どうすればよいですか?私は最初に関数ポインタを取得し、それを適用すると思いますが、構文が何であるかはわかりません。このような何か...

//グラブソフトマックス関数ポインタ

FunctionPtr SoftmaxFuncPtr =ソフトマックス(出力データ); // argをキャストする方法は?

//このFuntionPtrを評価する方法は?

SoftmaxFuncPtr-> eval(); // WAG - わかりません...

計算結果はどこに行きますか?

おかげであなたは私にいくつかのヒントを与えることができる場合は...

+0

[this](https://stackoverflow.com/editing-help#code)を読んで、見たいと思うように質問してください。編集フィールドの下にあるプレビューパネルを使用します。 –

答えて

1

まずあなたは、ソフトマックスの入力のためのようなものの変数を定義する必要があります:あなたが使用して合成関数を構築し、その後

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

をソフトマックスは、その後

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

ように、評価のためにデータを準備するために、入力と出力マップを構築し、次いでフォワード(呼び出し)や入力データおよびGeの評価を実行する)(評価しますt出力結果。

EvalMultithreads.cppのMultiThreadsEvaluationWithNewFunction()サンプルでは、​​新しい評価関数を作成する方法を紹介しています。 pageには、これらのサンプルの使用方法が記載されています。この関数には複数のレイヤーがあり、マルチスレッドを使った評価をサポートしているので、あなたのケースでは必要ないコードがいくつかあるかもしれません。サンプルではまだ低レベルのAPIを使用して入出力データを操作していますが、Value :: CreateBatch/Sequence/BatchOfSequence()、Value :: CopyVariableValueTo()などの高度な便利なメソッドも用意されています。 /低レベルの詳細を知らずにデータを出力します。 CNTKLibrary.hにはこれらのAPISの説明もあります。

ご質問はお寄せください。 ありがとう、

+0

Hmmm ... OK、私はすべての構文と意味を理解しようとしています... CNTKはすべて任意のテンソルを許すように設定されているので複雑です。私は本当にこれは: std:ベクトル答え= softmax(outputData); しかし、私は次の記事を見てみたいです。 – Tullhead

+0

//入力変数を定義する \t NDShape DimensionsOfInput(1、ntot); \t auto inputVar = InputVariable(DimensionsOfInput、DataType :: Float、L "InputSoftMax"); \t std :: vector inputData(inputVar.Shape()。TotalSize()); \t //データ \t(i = 0; iは用と入力変数を埋める GetAt機能(I)。 \t} \t // \t FunctionPtr SoftmaxFuncPtr =ソフトマックス(inputVar、L "のSoftMax")合成関数を構築します。 \t auto EvalFuncPtr = AsComposite(SoftmaxFuncPtr、L "EvalSoftMax"); \t ...続けて... – Tullhead

+0

は、入力ValuePtrに作成// \t ValuePtrにinputValueで= MakeSharedObject (MakeSharedObject (inputVar.Shape()、引数inputData、真)); ?//私は \t //出力ValuePtrに \t ValuePtrにoutputValueを作成する「」のSharedObjectが必要なのです。 \t自動outputVar = EvalFuncPtr->出力(); \tのstd :: unordered_map <変数、ValuePtrに>出力= {{ outputVar、outputValue}}; \t //関数を適用 \t EvalFuncPtr->フォワード({{inputVar、inputValueで}}、出力); \t //出力値を取得 \t outputValue =出力[outputVar]。 \t // outputValueからoutputData配列を抽出するために何か他の処理を行う – Tullhead