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_space和space_to_depth運算子中有重大變更。 這些已更新以符合 ONNX 規格,特別是深度維度在空間維度中如何放置為區塊的相片順序,反之亦然。 請參閱這兩個作業的更新檔範例,以查看變更。
Tan 和 Atan
已新增對三角式作業 Tan
和 Atan
的支援。
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 模型的匯入和匯出期間的錯誤報表。
- 已更新
DepthToSpace
和SpaceToDepth
操作,以符合排列上的 ONNX 規格,以取得深度維度如何放置為區塊維度。 - 已新增在 ONNX op 中
ELU
匯出alpha
屬性的支援。 - 對 和
Pooling
匯出進行重大修改Convolution
。 不同于之前,這些作業不會在任何情況下匯出明確的Pad
作業。 - 匯出和匯入
ConvolutionTranspose
的主要修改。 完全支援 、output_padding
和pads
等output_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
//Softmax
LogSoftmax
匯入/匯出。 - 已新增對
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 在物件解構時未呼叫。