共用方式為


Windows上的模型評估

目前,CNTK提供 C++、C#/.NET、Python 和 JAVA 中的程式庫,以載入和評估Windows上的模型。 從 v2.1 開始,CNTK也支援通用 Windows 平臺 (UWP) 。

使用 C#/.NET 受控 API

CNTK程式庫提供受控 (.NET) 程式庫,以使用 C# 和其他 .NET 語言評估 CPU 和 GPU 上的CNTK模型。 NuGet套件CNTK。CPUOnly 是專為在 CPU 和 CNTK 上執行而設計。GPU 是專為在具有 NVIDIA GPU 的裝置上執行而設計。 如需如何安裝CNTK程式庫NuGet套件的詳細資訊,請參閱NuGet套件頁面。 請注意,需要 Visual Studio 2017,而且專案屬性中的目標平臺應該是 X64。

CNTK程式庫受控 API 可讓您在指定的裝置上載入和評估預先定型的模型, (CPU 或 GPU) 。 它也提供不同的方式,協助您以密集、單熱向量或疏鬆 CSC 格式準備輸入和輸出資料。 輸入資料可以是單一樣本、多個樣本的批次、樣本序列,或具有可變長度的序列批次。 如需批次和順序格式的詳細描述,請參閱概念CNTK頁面。 評估之後,API 會提供方便的方法來取得結果。

C#/.NET 程式設計手冊

使用 CNTK程式庫受控 API 進行模型評估的一般步驟包括:

  1. 視使用量) 而定,安裝適當的NuGet套件 (CPU 或 GPU。 詳細資料會在CNTK NuGet 套件中描述。
  2. Function.Load () 載入模型。 傳回的值是 Function 參考已載入模型的實例。
  3. 如有需要,請呼叫屬性 ArgumentsOutputOutputs Load () 傳回的 Function 實例,以取得載入模型的輸入和輸出。 輸入和輸出會以 Variable 表示。 呼叫 Variable 的對應屬性,即可找到每個個別輸入或輸出的詳細資訊,例如 NameShape
  4. 針對每個輸入,準備輸入資料以供評估。 根據使用方式,輸入資料可能包含單一樣本、多個樣本批次、樣本序列,或具有可變長度的序列批次。 關於儲存體,輸入資料可以是密集格式、單熱向量或疏鬆 CSC 格式。 物件 Value 用來表示具有不同內容和格式的輸入資料。 CNTK API 提供不同的方法來輕鬆地從純使用者資料建立 Value 物件。
    • CreateBatch() 會建立 Value 物件,其中包含單一或多個範例的批次。
    • CreateSequence() 會建立 Value 物件,其中包含具有多個範例的序列。 您可以從先前呼叫此方法的序列清單中,指定這個序列是否為相同索引上一個序列的新序列或接續。
    • CreateBatchOfSequences() 會建立包含序列批次的 Value 物件。 每個序列都有樣本的可變長度。 上述所有方法都支援密集、單熱向量或疏鬆 CSC 格式。
  5. Evaluate()呼叫 方法來執行評估。 參數 arguments 會定義輸入變數及其相關聯的值,並 outputs 定義輸出變數。 如果輸出變數的 Value 物件為 null ,CNTK Library 會配置輸出值的實際儲存體。 傳回時,Evaluate () 會將評估結果儲存到與輸出變數相關聯的 Value 物件中。
  6. GetDenseData()/GetOneHotData()呼叫輸出值的 方法,以純文字資料格式取得結果。 它會將儲存在 Value 物件中的資料複製到緩衝區,做為具有可變長度樣本的序列清單,不論是密集格式或單熱向量格式, (疏鬆格式的支援很快就會新增) 。

CNTK程式庫受控 API 會在CNTK 程式庫 C#/.NET 受控 API頁面中說明。

平行評估多個要求

CNTK支援平行評估多個要求。 因為在同一個模型實例上執行評估不是安全線程,所以必須先使用 呼叫 Clone () ParameterCloningMethod.Share 來建立多個模型實例,然後每個執行緒都會使用不同的模型實例進行評估。 示範 EvaluateMultipleImagesInParallelAsync() 如何使用 CNTK C#/.NET 受控 API 來評估並行要求。

以非同步方式執行評估

CNTK C# API 沒有評估 () 的非同步方法,因為評估是 CPU 系結作業 (請參閱 [本文] () https://blogs.msdn.microsoft.com/pfxteam/2012/03/24/should-i-expose-asynchronous-wrappers-for-synchronous-methods/ ,以取得詳細的說明) 。 不過,想要在某些使用案例中以非同步方式執行評估,例如卸載回應性,我們會在範例 EvaluationSingleImageAsync() 中示範如何使用擴充方法 EvaluateAsync() 達成該目標。

評估中繼層

CNTK C# API 能夠評估模型圖形中的中繼層。 如此一來,即可依其名稱找到所需的圖層,而且可以評估中繼層。 C# 中的 EvaluateIntermediateLayer () 範例示範如何在模型中評估中繼層。

評估多個節點的輸出

CNTK可以將輸出結合成單一節點,在模型圖形中評估多個節點。 C# 中的 EvaluateCombinedOutputs () 範例示範如何評估多個輸出。

C# 範例

CNTKLibraryCSEvalExamples示範如何使用 CNTK 程式庫NuGet套件在 C# 中評估模型。 如需建置和執行範例,請參閱 Eval 範例 頁面。

如果您不想使用 NuGet Package,您可以新增 Cntk.Core.Managed-<VERSION>.dll 作為專案的參考。 您可以在 Cntk.Core.Managed [CNTK發行] 頁面上的CNTK二進位發行套件中找到 DLL 和所有相依 DLL。 請確定 Cntk.Core.Managed DLL 的路徑及其相 依性 (在此頁面結尾看到清單,) 包含在應用程式的 DLL 搜尋路徑中。

使用 C++

CNTK程式庫 C++ API 支援 C++ 應用程式中的模型評估。 支援標準桌面應用程式和通用 Windows 平臺應用程式。 需要Visual Studio 2017,而且專案屬性中的目標平臺應該是 X64。

CNTK NuGet套件CNTK。CPUOnly 和 CNTK。GPU 包含 C++ CNTK程式庫,可用於在傳統型應用程式中使用CNTK。 若要在通用 Windows 平臺上使用CNTK,請安裝CNTK。UWP。CPUOnly。 藉由使用NuGet套件,包含和程式庫目錄的設定會自動新增至您的專案屬性。 同時支援偵錯和發行組建。 NuGet套件頁面說明如何取得及安裝CNTK NuGet套件。

C++ 程式設計手冊

下列步驟說明如何使用 C++ CNTK程式庫進行模型評估。

  1. Cntk.Core-<VERSION>.lib 匯入程式庫連結至應用程式。 如果您使用 NuGet 套件,則可以省略此步驟。 針對 UWP 應用程式,程式庫名稱為 Cnkt.Core_app-<Version>.lib
  2. 包含評估標頭檔 「CNTKLibrary.h」。
  3. 依 載入模型 CNTK::Function::Load() 。 傳回的 Function 物件代表模型的計算圖表。
  4. 準備每個輸入變數的資料。 您可以使用 CNTK::Value::CreateBatch()CNTK::Value::CreateSequence()CNTK::Value::CreateBatchOfSequences() 從輸入資料建立 Value 物件,分別代表樣本批次、樣本序列或樣本序列。
  5. 呼叫 CNTK::Function::Evaluate() 評估。 預期 Evaluate() 為輸入變數和輸入值的輸入unordered_map,以及輸出變數和輸出值的unordered_map。 輸出值物件可能 null 表示CNTK程式庫會配置此輸出值的實際儲存體。 傳回時,與輸出變數相關聯的 Value 物件包含評估的結果。
  6. 從評估結果取得輸出資料。 使用 CNTK::Value::CopyVariableValueTo() 將儲存在 Value 物件中的資料複製到緩衝區中,做為具有樣本可變長度的序列清單。

若要同時評估多個要求, CNTK::Function::Clone() 應在 Evaluate () 之前呼叫。 示範 ParallelEvaluationExample() 如何使用 CNTK C++ 程式庫 API 平行評估多個要求。

如需 C++ CNTK程式庫 API 以供評估的詳細資訊,請參閱CNTK 程式庫 C++ 評估介面頁面。

C++ 範例

C++ 範例 CNTKLibraryCPPEvalCPUOnlyExamples ,並 CNTKLibraryCPPEvalGPUExamples 說明上述的使用模式。 UWPImageRecognition包含使用CNTK UWP 程式庫進行模型評估的範例。 [Eval 範例]頁面提供建置和執行範例的詳細步驟。

或者,您可以使用 C++ CNTK程式庫,而不使用 NuGet 套件。 您可以從 [CNTK發行] 頁面取得 Cntk.Core-<VERSION>.lib (或 Cntk.Core_app-<Version>.lib) 和所有相依 DLL,或從 CNTK原始程式碼建置它們。 您也需要設定 include 和 library 路徑以指向正確的目錄,並確定 CNTK (偵錯或發行程式庫的組建組態) 與專案設定 (相同,否則您將會收到非預期的例外狀況) 。 CNTK版本套件只包含二進位檔的版本組建。

使用您的Windows應用程式寄送CNTK程式庫

CNTK程式庫需要將 Visual Studio 2017 C++ 可轉散發套件 套件安裝在要執行應用程式的系統上。 而且專案屬性中的目標平臺應該是 X64。

此頁面描述如何命名CNTK二進位檔。

針對傳統型 C++ 應用程式,下列 DLL 必須與您的應用程式一起散發。

  • Cntk.Core-<VERSION>.dll
  • Cntk.Math-<VERSION>.dll
  • libiomp5md.dll
  • mklml.dll

如果您使用 C#/.NET 受控程式庫,除了上述 DLL 之外,您還需要另外包含下列 DLL:

  • Cntk.Core.Managed-<VERSION>.dll
  • Cntk.Core.CSBinding-<VERSION>.dll

若要使用 GPU,除了包含下列 NVIDIA CUDA 相關 DLL 之外,您還需要:

  • cublas64_90.dll
  • cudart64_90.dll
  • cudnn64_7.dll
  • curand64_90.dll
  • cusparse64_90.dll
  • nvml.dll

注意

CNTK 2.1 版中變更。

CNTK NuGet套件隨附 cuDNN 6 (cudnn64_6.dll) 。

您可以在CNTK二進位版本中找到所有這些 DLL,請參閱CNTK版本頁面

針對 UWP 應用程式,您必須將下列 DLL 與您的應用程式一起散發。 您可以在 Nuget 套件 CNTK.UWP.CPUOnly 中找到這些 DLL。

  • Cntk.Core_app-<VERSION>.dll
  • Cntk.Math_app-<VERSION>.dll
  • libopenblas.dll

使用 Python

您可以使用 Python 來評估預先定型的模型。 您可以 在這裡找到範例。

使用 Java

CNTK也提供 API 來評估 JAVA 應用程式中的模型。 請注意,CNTK JAVA API 仍為實驗性,且可能有所變更。

JAVA 範例示範如何使用 JAVA API 評估 CNN 模型。

若要使用 CNTK JAVA 程式庫,請將檔案 cntk.jar 新增至 classpath JAVA 專案的 。 如果您使用 IDE,您應該將此新增為 Unmanaged jar。 cntk.jar 檔案可以在 cntk\cntk\java) 資料夾中 (CNTK二進位版本套件中找到。 您也可以從CNTK來源建置 cntk.jar。 也請設定 java.library.path 為包含 Cntk.Core.JavaBinding-<Version>.dll 的目錄,並確定包含 CNTK二進位 DLL 的目錄位於系統的 DLL 搜尋路徑中,例如將目錄新增至 PATH 環境變數。 請注意,您也需要安裝 C++ 可轉散發套件 package for Visual Studio 2017。 如果您在 JAVA 中取得 UnsatisfiedLinkErrors ,通常是因為目錄不在 DLL 搜尋路徑中, (或順序錯誤) 。

JAVA 程式庫目前使用 64 位 Oracle JDK 8 建置及測試。