CNTK
Microsoft认知工具包(https://cntk.ai )是一个统一的深度学习工具包,它通过有向图将神经网络描述为一系列计算步骤。在这个有向图中,叶节点表示输入值或网络参数,而其他节点表示对其输入的矩阵运算。CNTK允许用户轻松地实现和组合流行的模型类型,例如前馈DNN、卷积网络(CNN)和递归网络(RNNs/LSTM)。它通过跨多个GPU和服务器的自动区分和并行化实现随机梯度下降(SGD,误差反向传播)学习。自2015年4月以来,CNTK一直在开源许可证下提供。我们希望社区能够利用CNTK的优势,通过开放源码工作代码的交流,更快地分享想法
安装
安装夜间软件包
如果您更喜欢使用MASTER的最新CNTK位,请使用CNTK夜间软件包之一:
学习CNTK
您可以通过以下资源了解更多关于使用和贡献CNTK的信息:
更多信息
免责声明
亲爱的社区:
随着我们对ONNX和ONNX Runtime的持续贡献,我们已经使AI框架生态系统内的互操作变得更容易,并为传统ML模型和深度神经网络访问高性能的跨平台推理功能。在过去的几年里,我们有幸开发了这样的关键开源机器学习项目,包括Microsoft Cognitive Toolkit,它使其用户能够利用整个行业在大规模深度学习方面的进步
今天的2.7版本将是CNTK的最后一个主要版本。我们可能会有一些后续的小版本来修复错误,但这些版本将根据具体情况进行评估。此版本之后没有开发新功能的计划
CNTK 2.7版本完全支持ONNX 1.4.1,我们鼓励那些寻求将其CNTK模型运行化的用户利用ONNX和ONNX Runtime。展望未来,用户可以通过众多支持ONNX的框架继续利用不断发展的ONNX创新。例如,用户可以从PyTorch本机导出ONNX模型,或使用TensorFlow-ONNX转换器将TensorFlow模型转换为ONNX
我们非常感谢自CNTK最初开放源码发布以来多年来我们从贡献者和用户那里得到的所有支持。CNTK使微软团队和外部用户都能够在各种深度学习应用程序中执行复杂而大规模的工作负载,例如该框架的创始人微软语音研究人员在语音识别方面取得的历史性突破
随着ONNX越来越多地被用于为Bing和Office等微软产品提供服务的模型,我们致力于将研究创新与生产的严格要求相结合,以推动生态系统向前发展
最重要的是,我们的目标是使跨软件和硬件堆栈的深度学习创新尽可能开放和可访问。我们将努力将CNTK的现有优势和最新的最新研究成果应用到其他开源项目中,以真正扩大此类技术的应用范围。
怀着感激之情,
–CNTK团队
Microsoft开放源代码行为准则
本项目采用了Microsoft Open Source Code of Conduct 有关更多信息,请参阅Code of Conduct FAQ 或联系方式opencode@microsoft.com 如有任何其他问题或评论
新闻
您可以在以下网站上找到更多新闻the official project feed
2019-03-29 CNTK 2.7.0
此版本的亮点
已迁移到适用于Windows和Linux的CUDA 10
在ONNX导出中支持高级RNN环路
以ONNX格式导出大于2 GB的型号
在大脑脚本训练动作中支持FP16
支持CUDA 10的CNTK
CNTK现在支持CUDA 10。这需要更新到Visual Studio 2017 v15.9 for Windows的构建环境
要在Windows上设置生成和运行时环境,请执行以下操作:
要使用docker在Linux上设置构建和运行时环境,请使用Dockerfiles构建Unbuntu 16.04坞站映像here 对于其他Linux系统,请参考Dockerfile来设置CNTK的依赖库
在ONNX导出中支持高级RNN环路
带有递归循环的CNTK模型可以通过扫描操作导出到ONNX模型
以ONNX格式导出大于2 GB的型号
要以ONNX格式导出大于2 GB的模型,可使用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。在这种情况下,模型参数保存在外部文件中。使用onnxrun进行模型评估时,导出的模型应与外部参数文件一起使用
2018/11/26
Netron 现在支持可视化CNTK v1和CNTK v2.model
文件
项目变更日志
2018-09-17 CNTK 2.6.0
高效群卷积
对CNTK中的分组卷积实现进行了更新。更新后的实现不再创建分组卷积的子图(使用切片和拼接),而是直接使用cuDNN7和MKL2017API。这在性能和型号大小方面都改善了体验
例如,对于具有以下属性的单个组卷积OP:
输入张量(C,H,W)=(32,128,128)
输出通道数=32(通道倍增为1)
组=32(深度卷积)
内核大小=(5,5)
此单个节点的比较编号如下:
第一个标题
GPU EXEC。时间(单位为毫秒,平均运行1000次)
CPU EXEC。时间(单位为毫秒,平均运行1000次)
模型大小(KB,CNTK格式)
旧实施
9.349
41.921
38
新实施
6.581
9.963
5个
加速/节约近似值
30%近似
65-75%近似
87%
顺序卷积
更新了CNTK中序列卷积的实现。更新后的实现创建单独的顺序卷积层。与规则卷积层不同,该操作还在动态轴(序列)上进行卷积,并将过滤_Shape[0]应用于该轴。更新后的实现支持更广泛的情况,例如序列轴的跨度>1
例如,对一批单通道黑白图像进行顺序卷积。这些图像的高度相同,固定为640,但每个图像的宽度都是可变的。然后,宽度由顺序轴表示。启用填充,宽度和高度的步长均为2
操作员
深度到空间和空间到深度
有一个突破性的变化,那就是深度到空间 和空间到深度 操作员。这些已经更新,以符合ONNX规范,特别是深度维度在空间维度中作为块放置的排列方式,反之亦然。请参考这两个操作的更新文档示例以查看更改
谭恩美和阿坦
添加了对三角运算的支持Tan
和Atan
ELU
添加了对以下各项的支持alpha
ELU操作中的属性
卷积
更新的自动填充算法Convolution
在不影响最终卷积输出值的情况下,在CPU上尽最大努力产生对称填充。此更新增加了MKL API可以覆盖的案例范围,并提高了性能,例如ResNet50
默认参数顺序
有一个突破性的变化,那就是论据 属性。默认行为已更新,以Python顺序而不是C++顺序返回参数。这样,它将以与输入到操作中相同的顺序返回参数。如果您仍然希望以C++顺序获取参数,只需覆盖全局选项即可。此更改应仅影响以下操作:Times、TransposeTimes和Gemm(内部)
错误修复
已更新卷积图层的文档,以包括组参数和膨胀参数
添加了改进的分组卷积输入验证
已更新LogSoftMax
要使用更稳定的数值实现,请执行以下操作
修复了聚集OP的错误渐变值
添加了对python克隆替换中的“None”节点的验证
添加了卷积中填充通道轴的验证
添加了CNTK本机默认lotusIR记录器,以修复加载某些ONNX型号时出现的“尝试使用DefaultLogger”错误
添加了ONNX TypeStrToProtoMap的正确初始化
更新了python doctest,以处理较新版本号(Version>=1.14)的不同打印格式
当内核中心位于填充的输入单元上时,固定池(CPU)可生成正确的输出值
ONNX
更新
更新了CNTK的ONNX导入/导出以使用ONNX 1.2规范
对如何在导出和导入中处理批次和序列轴进行了重大更新。因此,可以准确地处理复杂场景和边缘情况
更新了CNTK的ONNXBatchNormalization
OP导出/导入到最新规范
将模型域添加到ONNX模型导出
改进了ONNX型号导入和导出期间的错误报告
已更新DepthToSpace
和SpaceToDepth
操作以匹配ONNX关于如何将深度维度放置为挡路维度的排列规范
添加了对导出的支持alpha
中的属性ELU
ONNX操作
大修是为了Convolution
和Pooling
导出。与以前不同的是,这些操作不会导出显式Pad
在任何情况下都可操作
大修是为了ConvolutionTranspose
导出和导入。属性,如output_shape
,output_padding
,以及pads
完全支持
添加了对CNTK的支持StopGradient
作为一个禁区
添加了对TOPK操作的ONNX支持
添加了对序列操作的ONNX支持:Sequence.Slice、Sequence.first、Sequence.last、Sequence.duce_sum、Sequence.Reduce_max、Sequence.softmax。对于这些操作,不需要扩展ONNX规范。CNTK ONNX Exporter仅为这些序列操作构建计算等效图
添加了对Softmax操作的完全支持
使CNTK广播运营与ONNX规范兼容
在CNTK ONNX导出器中处理TO_BATCH、TO_SEQUENCE、UNPACK_BATCH、Sequence.Unpack工序
用于导出ONNX测试用例以供其他工具箱运行和验证的ONNX测试
固定的Hardmax
/Softmax
/LogSoftmax
导入/导出
添加了对以下各项的支持Select
OP导出
添加了对多个三角运算的导入/导出支持
更新了对ONNX的CNTK支持MatMul
操作
更新了对ONNX的CNTK支持Gemm
操作
更新了CNTK的ONNXMeanVarianceNormalization
OP导出/导入到最新规范
更新了CNTK的ONNXLayerNormalization
OP导出/导入到最新规范
更新了CNTK的ONNXPRelu
OP导出/导入到最新规范
更新了CNTK的ONNXGather
OP导出/导入到最新规范
更新了CNTK的ONNXImageScaler
OP导出/导入到最新规范
更新了CNTK的ONNXReduce
操作导出/导入到最新规范
更新了CNTK的ONNXFlatten
OP导出/导入到最新规范
添加了对ONNX的CNTK支持Unsqueeze
操作
错误或次要修复:
更新了LRN OP以匹配ONNX 1.2规范,其中size
属性具有直径的语义,而不是半径的语义。添加了LRN内核大小大于通道大小时的验证
已更新Min
/Max
导入实现以处理各种输入
修复了在现有ONNX模型文件上重新保存时可能出现的文件损坏
网络支持
Cntk.Core.Managed库已正式转换为.Net标准,并在Windows和Linux上支持.Net Core和.Net Framework应用程序。从这个版本开始,.NET开发人员应该能够使用新的.Net SDK样式项目文件(包管理格式设置为PackageReference)恢复CNTK Nuget包
下面的C#代码现在可以在Windows和Linux上运行:
例如,只需在.Net Core应用程序的.csproj文件中添加ItemGroup子句就足够了:>netcoreapp2.1>x64>
错误或次要修复:
修复了Linux上C#string和char到本机wstring和wchar UTF转换的问题
修复了代码库中的多字节和宽字符转换
修复了针对.Net标准打包的Nuget包机制
修复了C#API中值类中的内存泄漏问题,其中在对象销毁时不调用Dispose
杂项
2018-04-16 CNTK 2.5.1
使用捆绑包中包含的第三方库(Python轮包)重新打包CNTK 2.5
2018-03-15 CNTK 2.5
将探查器详细信息输出格式更改为chrome://tracing
启用逐节点计时。工作示例here
启用探查器时,按节点计时会在探查器详细信息中创建项目
Python中的用法:
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 ()
中的Profiler详细信息视图示例chrome://tracing
使用MKL提高CPU推理性能
加速用于Float32的英特尔CPU推理中的一些常见张量运算,特别是对于完全连接的网络
可以通过以下方式打开/关闭cntk.cntk_py.enable_cpueval_optimization()/cntk.cntk_py.disable_cpueval_optimization()
1BitSGD并入CNTK
1BitSGD
源代码现已随CNTK许可证(MIT许可证)一起在以下位置提供Source/1BitSGD/
1bitsgd
生成目标已合并到现有GPU目标中
新的损耗函数:分层Softmax
具有多个学习者的分布式培训
操作员
已添加MeanVarianceNormalization
操作员
错误修复
修复了教程201b中的收敛问题
固定的合用/解合,以支持序列的自由维度
修复了中的崩溃CNTKBinaryFormat
跨越扫描边界时的反序列化程序
修正了RNN阶跃函数在标量广播中的形状推断错误
修复了在以下情况下的构建错误mpi=no
通过提高打包阈值和暴露V2中的旋钮来提高分布式训练聚合速度
修复了MKL布局中的内存泄漏
修复了中的错误cntk.convert
API Inmisc.converter.py
,这样可以防止将复杂的网络
ONNX
更新
CNTK导出的ONNX型号现在ONNX.checker
合规
添加了对CNTK的ONNX支持OptimizedRNNStack
操作员(仅限LSTM)
添加了对LSTM和GRU运算符的支持
添加了对实验性ONNX操作的支持MeanVarianceNormalization
添加了对实验性ONNX操作的支持Identity
添加了对导出CNTK的支持LayerNormalization
使用ONNX的图层MeanVarianceNormalization
操作
错误或次要修复:
轴属性在CNTK的ONNX中是可选的Concat
操作员
修复标量ONNX广播中的错误
修复ONNX ConvTranspose运算符中的错误
修复向后兼容性错误LeakyReLu
(参数“alpha”恢复为双精度类型)
杂项
添加了新的接口find_by_uid()
在……下面cntk.logging.graph
2018-02-28 CNTK支持夜间构建
如果您更喜欢使用MASTER提供的最新CNTK位,请使用CNTK夜间软件包之一
或者,您也可以单击相应的构建标记以登录到夜间构建页面
2018-01-31 CNTK 2.4
亮点:
已移至CUDA9、cuDNN 7和Visual Studio 2017
删除了Python 3.4支持
添加了Volta GPU和FP16支持
更好的ONNX支持
CPU性能改进
更多运营
运营部
top_k
操作:在正向传递中,它计算沿指定轴的顶部(最大)k值和相应的索引。在后向传递中,梯度分散到顶部k个元素(不在顶部k中的元素获得零梯度)
gather
操作现在支持轴参数
squeeze
和expand_dims
轻松移除和添加单一轴的操作
zeros_like
和ones_like
运营部。在许多情况下,您可以仅仅依靠CNTK正确地广播一个简单的0或1,但有时您需要实际的张量
depth_to_space
:将输入张量中的元素从深度维度重新排列到空间块中。此操作的典型用法是实现某些图像超分辨率模型的亚像素卷积
space_to_depth
:将输入张量中的元素从空间维度重新排列到深度维度。它在很大程度上与DepthToSpace相反
sum
操作:创建计算输入张量的元素求和的新函数实例
softsign
操作:创建计算输入张量的元素软符号的新函数实例
asinh
操作:创建一个新的函数实例,该实例计算输入张量的逐个元素的asinh
log_softmax
操作:创建计算输入张量的logsoftmax规格化值的新函数实例
hard_sigmoid
操作:创建计算输入张量的hard_sigmoid归一化值的新函数实例
element_and
,element_not
,element_or
,element_xor
基于元素的逻辑运算
reduce_l1
操作:沿提供的轴计算输入张量元素的L1范数
reduce_l2
操作:沿提供的轴计算输入张量元素的L2范数
reduce_sum_square
操作:沿提供的轴计算输入张量元素的平方和
image_scaler
操作:通过缩放图像的各个值来更改图像
ONNX
CNTK中对ONNX支持进行了多项改进
更新
更新的ONNXReshape
要处理的操作InferredDimension
添加producer_name
和producer_version
ONNX模型的字段
在两个都不是的情况下处理案件auto_pad
也不是pads
属性在ONNX中指定Conv
操作
错误修复
修复了ONNX中的错误Pooling
OP序列化
修复错误以创建ONNXInputVariable
只有一个批次轴
对ONNX实施的错误修复和更新Transpose
操作以匹配更新的规范
对ONNX实施的错误修复和更新Conv
,ConvTranspose
,以及Pooling
操作以匹配更新的规范
操作员
群卷积
修复了组卷积中的错误。CNTK的输出Convolution
OP将针对>1的组进行更改。预计在下一版本中将对组卷积进行更优化的实施
更好的分组卷积错误报告Convolution
图层
卤化物二元卷积
CNTK版本现在可以使用可选Halide 要构建的库Cntk.BinaryConvolution.so/dll
库,该库可以与netopt
模块。该库包含优化的二进制卷积操作符,其性能优于基于Python的二进制卷积操作符。要在内部版本中启用Halide,请下载Halide release 并将其设置为HALIDE_PATH
开始构建之前的环境变量。在Linux中,您可以使用./configure --with-halide[=directory]
来启用它。有关如何使用此功能的详细信息,请参阅How_to_use_network_optimization
有关更多信息,请参阅Release Notes 从CNTK Releases page
Documentation
TensorFlow是一个端到端的机器学习开源平台。它有一个由工具、库和社区资源组成的全面、灵活的生态系统,使研究人员能够使用ML推动最先进的技术,开发人员可以轻松地构建和部署基于ML的应用程序
TensorFlow最初是由谷歌机器智能研究组织内谷歌大脑团队的研究人员和工程师开发的,目的是进行机器学习和深度神经网络研究。该系统具有足够的通用性,可以广泛应用于其他领域
TensorFlow提供稳定的Python和C++API,以及不保证向后兼容的其他语言API
订阅untify@tensorflow.org,随时了解最新的版本公告和安全更新。查看所有邮件列表
安装
请参阅PIP包的TensorFlow安装指南,要启用GPU支持,请使用Docker容器,并从源代码构建
要安装当前版本(包括对启用CUDA的GPU卡(Ubuntu和Windows)的支持),请执行以下操作:
$ pip install tensorflow
此外,还提供了一个较小的仅限CPU的软件包:
$ pip install tensorflow-cpu
要将TensorFlow更新到最新版本,请在上述命令中添加–upgrade标志
夜间二进制文件可用于在PyPI上使用tf-nighly和tf-nighly-cpu包进行测试
尝试您的第一个TensorFlow程序
$ python
>>> import tensorflow as tf
>>> tf.add(1, 2).numpy()
3
>>> hello = tf.constant('Hello, TensorFlow!')
>>> hello.numpy()
b'Hello, TensorFlow!'
有关更多示例,请参阅TensorFlow教程
投稿指南
如果您想对TensorFlow做出贡献,请务必查看贡献指南。该项目遵循TensorFlow的行为准则。通过参与,您应该遵守本守则
我们使用GitHub问题来跟踪请求和错误,有关一般问题和讨论,请参阅TensorFlow讨论,并请将具体问题直接指向Stack Overflow
TensorFlow项目致力于遵守开源软件开发中公认的最佳实践:
连续生成状态
您可以在TensorFlow SIG build社区构建表中找到更多社区支持的平台和配置
官方版本
资源
了解有关TensorFlow社区以及如何做出贡献的更多信息
许可证
Apache License 2.0