聊天 | Windows 构建状态 | Linux 构建状态 |
---|---|---|
Microsoft 认知工具包 (https://cntk.ai) 是一个统一的深度学习工具包,它将神经网络描述为通过有向图的一系列计算步骤。在此有向图中,叶节点表示输入值或网络参数,而其他节点表示对其输入进行的矩阵运算。 CNTK 允许用户轻松实现和组合流行的模型类型,例如前馈 DNN、卷积网络 (CNN) 和循环网络 (RNN/LSTM)。它通过跨多个 GPU 和服务器的自动微分和并行化来实现随机梯度下降(SGD,误差反向传播)学习。 CNTK 自 2015 年 4 月起在开源许可下提供。我们希望社区能够利用 CNTK,通过开源工作代码的交流,更快地分享想法。
如果您更喜欢使用 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.ONNX,use_external_files_to_store_parameters 设置为 True。在这种情况下,模型参数保存在外部文件中。使用 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 版本页面获取版本。