CNTK v2.6 版本資訊

這版的重點

  • .Net 支援
  • 有效率的群組卷積。
  • 循序卷積的改善。
  • 更多運算子和現有運算子的改善。
  • ONNX 功能更新以支援 ONNX 1.2.2。
  • ONNX 轉換器支援更多作業。
  • 錯誤修正。

有效率的群組卷積

已更新CNTK中的群組卷積實作。 更新的實作會移開建立群組卷積的子圖形, (使用切割和切割) ,而是直接使用 cuDNN7 和 MKL2017 API。 這可改善效能和模型大小方面的體驗。

例如,針對具有下列屬性的單一群組卷積作業:

  • 輸入張量 (C、H、W) = (32、128、128)
  • 輸出通道數目 = 32 (通道乘數為 1)
  • 群組 = 32 (深度卷積)
  • 核心大小 = (5、5)

此單一節點的比較編號如下所示:

第一個標頭 GPU exec。 time (in millisec., 1000 run avg.) CPU exec。 time (in millisec., 1000 run avg.) 以 KB 為單位的模型大小 (,CNTK格式)
舊實作 9.349 41.921 38
新的實作 6.581 9.963 5
加速/節省約數 30% 近似值 65-75% 近似值 87%

循序卷積

已更新CNTK中循序卷積的實作。 更新的實作會建立個別的循序卷積層。 不同于一般卷積層,此作業也會在動態座標軸上 (序列) ,並將 filter_shape[0] 套用至該軸。 更新的實作支援更廣泛的案例,例如時序軸的進階 > 1。

例如,一批一通道黑色和白色影像的循序卷積。 影像的固定高度為 640,但每個高度都是可變長度。 寬度接著會以循序座標軸表示。 啟用邊框間距,寬度和高度的間距為 2。

 >>> f = SequentialConvolution((3,3), reduction_rank=0, pad=True, strides=(2,2), activation=C.relu)
 >>> x = C.input_variable(**Sequence[Tensor[640]])
 >>> x.shape
     (640,)
 >>> h = f(x)
 >>> h.shape
     (320,)
 >>> f.W.shape
     (1, 1, 3, 3)

運算子

depth_to_space和space_to_depth

depth_to_spacespace_to_depth運算子中有重大變更。 這些已更新以符合 ONNX 規格,特別是深度維度在空間維度中如何放置為區塊的相片順序,反之亦然。 請參閱這兩個作業的更新檔範例,以查看變更。

Tan 和 Atan

已新增對三角式作業 TanAtan 的支援。

ELU

已新增 alpha ELU op 中屬性的支援。

迴旋

已更新 的 Convolution 自動填補演算法,以在 CPU 上產生對稱填補,而不會影響最終卷積輸出值。 此更新會增加 MKL API 可能涵蓋的案例範圍,並改善效能,例如 ResNet50。

預設引數順序

CNTK python API 的引數屬性有重大變更。 預設行為已更新為以 Python 順序傳回引數,而不是以 C++ 順序傳回引數。 如此一來,它會以與送入作業相同的順序傳回引數。 如果您想要以 C++ 順序仍然取得引數,您可以直接覆寫全域選項。 這項變更應該只會影響下列作業:Times、TransposeTimes 和 Gemm (內部) 。

錯誤修正

  • 已更新卷積層的檔,以包含群組和 dilation 引數。
  • 已針對群組卷積新增改良的輸入驗證。
  • 已更新 LogSoftMax 為使用更具數值穩定實作的實作。
  • 已修正收集作業的漸層值不正確。
  • 已在 Python 複製替代中新增 'None' 節點的驗證。
  • 已在卷積中新增填補通道座標軸的驗證。
  • 已新增CNTK原生預設 lotusIR 記錄器,以修正載入某些 ONNX 模型時嘗試使用 DefaultLogger「 錯誤。
  • 已針對 ONNX TypeStrToProtoMap 新增適當的初始化。
  • 已更新 python doctest 來處理較新版本 numpy (版本 > = 1.14) 的不同列印格式。
  • 已修正當核心中心位於填補的輸入資料格時,CPU (CPU) 產生正確的輸出值。

ONNX

更新

  • 已更新CNTK的 ONNX 匯入/匯出,以使用 ONNX 1.2 規格。
  • 批次和順序座標軸在匯出和匯入時處理方式的主要更新。 因此,複雜的案例和邊緣案例會正確處理。
  • 已將CNTK的 ONNX BatchNormalization op 匯出/匯入更新為最新的規格。
  • 已將模型域新增至 ONNX 模型匯出。
  • 改善在 ONNX 模型的匯入和匯出期間的錯誤報表。
  • 已更新 DepthToSpaceSpaceToDepth 操作,以符合排列上的 ONNX 規格,以取得深度維度如何放置為區塊維度。
  • 已新增在 ONNX op 中 ELU 匯出 alpha 屬性的支援。
  • 對 和 Pooling 匯出進行重大修改 Convolution 。 不同于之前,這些作業不會在任何情況下匯出明確的 Pad 作業。
  • 匯出和匯入 ConvolutionTranspose 的主要修改。 完全支援 、 output_paddingpadsoutput_shape 屬性。
  • 已新增對 CNTK StopGradient 的支援做為無作業。
  • 已新增 TopK op 的 ONNX 支援。
  • 已新增序列 ops 的 ONNX 支援:sequence.slice、sequence.first、sequence.last、sequence.reduce_sum、sequence.reduce_max、sequence.softmax。 對於這些作業,不需要擴充 ONNX 規格。CNTK ONNX 匯出工具只會為這些序列作業建置計算等價圖表。
  • 已新增 Softmax op 的完整支援。
  • 讓CNTK廣播作業與 ONNX 規格相容。
  • 在 CNTK ONNX 匯出工具中處理to_batch、to_sequence、unpack_batch、sequence.unpack ops。
  • ONNX 測試可匯出 ONNX 測試案例,以供其他工具組執行及驗證。
  • 已修正 Hardmax//SoftmaxLogSoftmax 匯入/匯出。
  • 已新增對 Select 作業匯出的支援。
  • 已新增數個三角式作業的匯入/匯出支援。
  • 已更新 ONNX MatMul op CNTK支援。
  • 已更新 ONNX Gemm op CNTK支援。
  • 已將CNTK的 ONNX MeanVarianceNormalization op 匯出/匯入更新為最新的規格。
  • 已將CNTK的 ONNX LayerNormalization op 匯出/匯入更新為最新的規格。
  • 已將CNTK的 ONNX PRelu op 匯出/匯入更新為最新的規格。
  • 已將CNTK的 ONNX Gather op 匯出/匯入更新為最新的規格。
  • 已將CNTK的 ONNX ImageScaler op 匯出/匯入更新為最新的規格。
  • 已將 CNTK 的 ONNX Reduce ops 匯出/匯入更新為最新的規格。
  • 已將CNTK的 ONNX Flatten op 匯出/匯入更新為最新的規格。
  • 已新增 ONNX Unsqueeze op 的CNTK支援。

錯誤或次要修正:

  • 已更新 LRN op 以符合 ONNX 1.2 規格,其中 size 屬性具有直徑的語意,而非半徑。 如果 LRN 核心大小大於通道大小,則新增驗證。
  • 已更新 Min/Max 匯入實作以處理 variadic 輸入。
  • 已修正在現有 ONNX 模型檔案上重新儲存時可能發生的檔案損毀。

.Net 支援

Cntk.Core.Managed 程式庫已正式轉換成 .Net Standard,並支援 Windows 和 Linux 上的 .Net Core 和 .Net Framework 應用程式。 從此版本開始,.Net 開發人員應該能夠使用新的 .Net SDK 樣式專案檔還原CNTK Nuget 套件,並將套件管理格式設定為 PackageReference。

下列 C# 程式碼現在適用于 Windows 和 Linux:

 >>> var weightParameterName = "weight";
 >>> var biasParameterName = "bias";
 >>> var inputName = "input";
 >>> var outputDim = 2;
 >>> var inputDim = 3;
 >>> Variable inputVariable = Variable.InputVariable(new int[] { inputDim }, DataType.Float, inputName);
 >>> var weightParameter = new Parameter(new int[] { outputDim, inputDim }, DataType.Float, 1, device, weightParameterName);
 >>> var biasParameter = new Parameter(new int[] { outputDim }, DataType.Float, 0, device, biasParameterName);
 >>> 
 >>> Function modelFunc = CNTKLib.Times(weightParameter, inputVariable) + biasParameter;

例如,只要在.Net Core應用程式的 .csproj 檔案中新增 ItemGroup 子句就已足夠: >>>>>>>>>>>> netcoreapp2.1 >>> x64>>>>>>>>>>>>>>>>>>>>>

錯誤或次要修正:

  • 已修正 Linux 上的 C# 字串和 char 為原生 wstring 和 wchar UTF 轉換問題。
  • 已修正跨程式碼基底的多位元組和寬字元轉換。
  • 已修正 .Net Standard 的 Nuget 套件機制。
  • 已修正 C# API 中 Value 類別中的記憶體流失問題,其中 Dispose 在物件解構時未呼叫。