聊天 | Windows 建置狀態 | Linux 建置狀態 |
---|---|---|
Microsoft 認知工具包 (https://cntk.ai) 是一個統一的深度學習工具包,它將神經網路描述為透過有向圖的一系列計算步驟。在此有向圖中,葉節點表示輸入值或網路參數,而其他節點表示對其輸入進行的矩陣運算。 CNTK 讓使用者可以輕鬆實現和組合流行的模型類型,例如前饋 DNN、卷積網路 (CNN) 和循環網路 (RNN/LSTM)。它透過跨多個 GPU 和伺服器的自動微分和平行化來實現隨機梯度下降(SGD,誤差反向傳播)學習。 CNTK 自 2015 年 4 月起在開源許可下提供。
如果您喜歡使用 master 中的最新 CNTK 位,請使用 CNTK nightly 軟體包之一:
您可以透過以下資源了解有關使用 CNTK 和為 CNTK 做出貢獻的更多資訊:
親愛的社區,
透過我們對 ONNX 和 ONNX 運行時的持續貢獻,我們讓 AI 框架生態系統內的互通變得更加容易,並為傳統 ML 模型和深度神經網路存取高效能、跨平台推理功能。在過去的幾年裡,我們有幸開發了此類關鍵的開源機器學習項目,包括 Microsoft Cognitive Toolkit,該工具包使其用戶能夠大規模利用全行業在深度學習方面的進步。
今天的 2.7 版本將是 CNTK 的最後一個主要版本。我們可能會發布一些後續的小版本來修復錯誤,但這些版本將根據具體情況進行評估。此版本後沒有新功能開發計劃。
CNTK 2.7 版本完全支援 ONNX 1.4.1,我們鼓勵那些尋求操作其 CNTK 模型的人利用 ONNX 和 ONNX 運行時。展望未來,用戶可以透過支持它的大量框架繼續利用不斷發展的 ONNX 創新。例如,使用者可以從 PyTorch 原生匯出 ONNX 模型,或使用 TensorFlow-ONNX 轉換器將 TensorFlow 模型轉換為 ONNX。
我們非常感謝自 CNTK 首次開源發布以來多年來貢獻者和用戶提供的所有支援。 CNTK 讓微軟團隊和外部用戶能夠以各種方式的深度學習應用程式執行複雜和大規模的工作負載,例如該框架的創始人微軟語音研究人員在語音識別方面取得的歷史性突破。
隨著 ONNX 越來越多地應用於 Bing 和 Office 等 Microsoft 產品所使用的服務模型,我們致力於將研究的創新與生產的嚴格要求相結合,以推動生態系統向前發展。
最重要的是,我們的目標是使跨軟體和硬體堆疊的深度學習創新盡可能開放且易於存取。我們將努力將 CNTK 的現有優勢和新的最先進的研究成果引入其他開源專案中,以真正擴大此類技術的應用範圍。
懷著感恩的心,
-- CNTK團隊
該專案採用了微軟開源行為準則。有關詳細信息,請參閱行為準則常見問題解答或聯繫 [email protected] 提出任何其他問題或意見。
您可以在官方專案來源上找到更多新聞
2019年3月29日。 CNTK 2.7.0
要在 Windows 上設定建置和運行環境:
若要使用 docker 在 Linux 上設定建置和執行時間環境,請在此處使用 Dockerfiles 建置 Unbuntu 16.04 docker 映像。其他Linux系統,請參考Dockerfiles設定CNTK的依賴函式庫。
具有遞歸循環的 CNTK 模型可以匯出到具有掃描操作的 ONNX 模型。
若要以 ONNX 格式匯出大於 2GB 的模型,請使用 cntk.Function API:save(self, filename, format=ModelFormat.CNTKv2, use_external_files_to_store_parameters=False),其中「format」設定為 ModelFormat.ON在這種情況下,模型參數會保存在外部文件中。使用 onnxruntime 進行模型評估時,導出的模型應與外部參數檔案一起使用。
2018年11月26日。
Netron 現在支援視覺化 CNTK v1 和 CNTK v2 .model
檔案。
2018年9月17日。 CNTK 2.6.0
CNTK 中組卷積的實作已更新。更新後的實作不再為組卷積建立子圖(使用切片和拼接),而是直接使用 cuDNN7 和 MKL2017 API。這改善了性能和模型大小的體驗。
例如,對於具有下列屬性的單組卷積運算:
此單節點的對比數如下:
第一個標題 | GPU 執行程式。時間(以毫秒為單位,1000 次運行的平均值) | CPU 執行。時間(以毫秒為單位,1000 次運行的平均值) | 模型大小(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)
height_to_space和space_to_depth運算子發生了重大變化。這些已更新以符合 ONNX 規範,特別是深度維度如何作為空間維度中的區塊放置的排列(反之亦然)已更改。請參閱這兩個操作的更新文件範例以查看變更。
增加了對三角運算Tan
和Atan
的支援。
在 ELU 操作中加入了對alpha
屬性的支援。
更新了Convolution
的自動填充演算法,以在 CPU 上盡最大努力產生對稱填充,而不影響最終的捲積輸出值。此更新增加了 MKL API 可以覆蓋的案例範圍並提高了效能,例如 ResNet50。
CNTK python API 中的參數屬性發生了重大變化。預設行為已更新為按 python 順序而不是按 C++ 順序傳回參數。這樣,它將按照參數輸入操作的順序傳回參數。如果您仍希望按 C++ 順序取得參數,則只需覆寫全域選項即可。此更改應該僅影響以下操作:Times、TransposeTimes 和 Gemm(內部)。
LogSoftMax
以使用數值更穩定的實作。BatchNormalization
操作匯出/匯入更新為最新規範。DepthToSpace
和SpaceToDepth
操作,以符合如何將深度維度放置為區塊維度的排列的 ONNX 規範。ELU
ONNX 操作中導出alpha
屬性的支援。Convolution
和Pooling
導出進行重大修改。與以前不同,這些操作在任何情況下都不會匯出明確的Pad
操作。ConvolutionTranspose
匯出和導入進行重大修改。完全支援諸如output_shape
、 output_padding
和pads
之類的屬性。StopGradient
作為無操作的支援。Hardmax
/ Softmax
/ LogSoftmax
導入/匯出。Select
操作導出的支援。MatMul
操作的支援。Gemm
操作的支援。MeanVarianceNormalization
操作匯出/匯入更新為最新規範。LayerNormalization
操作匯出/匯入更新為最新規格。PRelu
op 匯出/匯入更新為最新規範。Gather
op 匯出/導入更新為最新規範。ImageScaler
匯出/匯入操作更新為最新規範。Reduce
操作匯出/導入更新為最新規範。Flatten
操作匯出/導入更新為最新規範。Unsqueeze
操作的 CNTK 支援。size
屬性具有直徑語義,而不是半徑語義。新增了 LRN 內核大小是否大於通道大小的驗證。Min
/ Max
導入實現以處理可變輸入。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 >>> >>> >> > >>> >>> >>> >>>
2018年4月16日。 CNTK 2.5.1
使用捆綁包中包含的第三方庫重新打包 CNTK 2.5(Python 輪包)
2018年3月15日。 CNTK 2.5
將探查器詳細資料輸出格式變更為chrome://tracing
啟用每個節點計時。工作範例在這裡
import cntk as C
C . debugging . debug . set_node_timing ( True )
C . debugging . start_profiler () # optional
C . debugging . enable_profiler () # optional
#<trainer|evaluator|function> executions
< trainer | evaluator | function > . print_node_timing ()
C . debugging . stop_profiler ()
chrome://tracing
中的分析器詳細資料檢視範例
使用 MKL 提高 CPU 推理效能
cntk.cntk_py.enable_cpueval_optimization()/cntk.cntk_py.disable_cpueval_optimization()
開啟/關閉1BitSGD併入CNTK
1BitSGD
原始碼現已在Source/1BitSGD/
下方提供 CNTK 許可證(MIT 許可證)1bitsgd
建置目標已合併到現有 GPU 目標中新損失函數:分層softmax
多個學習者的分散式培訓
營運商
MeanVarianceNormalization
運算子。錯誤修復
CNTKBinaryFormat
解串器中的崩潰問題mpi=no
時的建置錯誤misc.converter.py
中cntk.convert
API中的一個錯誤,該錯誤阻止了複雜網路的轉換。奧恩克斯
ONNX.checker
標準。OptimizedRNNStack
運算子的 ONNX 支援(僅限 LSTM)。MeanVarianceNormalization
的支援。Identity
的支援。MeanVarianceNormalization
操作導出 CNTK 的LayerNormalization
層的支援。Concat
運算子中是可選的。LeakyReLu
的向後相容性錯誤修復(參數“alpha”恢復為 double 類型)。雜項
cntk.logging.graph
下方新增了新的 API find_by_uid()
。2018年2月28日。 CNTK支援夜間構建
如果您喜歡使用 master 的最新 CNTK 位,請使用 CNTK nightly 軟體包之一。
或者,您也可以點擊對應的建置徽章來登陸每晚建立頁面。
2018年1月31日。 CNTK 2.4
亮點:
OP
top_k
操作:在前向傳遞中,它計算沿指定軸的頂部(最大)k 值和相應索引。在向後傳遞中,梯度被分散到前 k 個元素(不在前 k 個元素中的元素梯度為零)。gather
操作現在支援軸參數squeeze
和expand_dims
操作可輕鬆刪除和新增單軸zeros_like
和ones_like
操作。在許多情況下,您可以依靠 CNTK 正確廣播簡單的 0 或 1,但有時您需要實際的張量。depth_to_space
:將輸入張量中的元素從深度維度重新排列為空間區塊。此操作的典型用途是為某些影像超解析度模型實現子像素卷積。space_to_depth
:將輸入張量中的元素從空間維度重新排列到深度維度。它很大程度上是 DepthToSpace 的逆過程。sum
運算:建立一個新的 Function 實例,用於計算輸入張量的元素總和。softsign
操作:建立一個新的 Function 實例,用於計算輸入張量的逐元素 softsign。asinh
操作:建立一個新的 Function 實例,用於計算輸入張量的元素級 asinh。log_softmax
作業:建立一個新的 Function 實例,用於計算輸入張量的 logsoftmax 歸一化值。hard_sigmoid
操作:建立一個新的 Function 實例,用於計算輸入張量的 Hard_sigmoid 歸一化值。element_and
、 element_not
、 element_or
、 element_xor
依元素邏輯運算reduce_l1
操作:沿著提供的軸計算輸入張量元素的 L1 範數。reduce_l2
操作:沿著提供的軸計算輸入張量元素的 L2 範數。reduce_sum_square
操作:計算輸入張量元素沿著提供的軸的平方和。image_scaler
操作:透過縮放影像的各個值來改變影像。奧恩克斯
Reshape
操作以處理InferredDimension
。producer_name
和producer_version
欄位加入 ONNX 模型。Conv
op 中既沒有指定auto_pad
也沒有指定pads
屬性的情況。Pooling
操作序列化的錯誤InputVariable
錯誤。Transpose
操作實作更新以符合更新的規格。Conv
、 ConvTranspose
和Pooling
操作的實現,以匹配更新的規範。營運商
Convolution
運算的輸出將針對群組 > 1 進行變更。Convolution
層中組卷積的更好的錯誤報告。鹵化物二元卷積
netopt
模組一起使用的Cntk.BinaryConvolution.so/dll
函式庫。此函式庫包含最佳化的二元卷積運算符,其效能優於基於 python 的二值化卷積運算符。若要在建置中啟用 Halide,請在開始建置之前下載 Halide 版本並設定HALIDE_PATH
環境變數。在 Linux 中,您可以使用./configure --with-halide[=directory]
來啟用它。有關如何使用此功能的更多信息,請參閱How_to_use_network_optimization。請參閱發行說明中的更多內容。從 CNTK 版本頁面取得版本。