微软认知工具包扩展库
cntkx的Python项目详细描述
cntkx
CNTKX是一个建立在微软认知工具包上的深度学习库,它是一个HReF="HTTPS://Github. COM/MICROSOFT/CNTK"Re="NoFoLoLo>"CNTK 。 尽管cntk 2.7的最后一个计划版本,cntkx将继续积极开发,更多的模型和预建组件即将到来!
请随时为任何请求或公关提供问题:)
安装
cntkx是用纯python编写的,cntk依赖于它。请先安装CNTK。然后:
pip install cntkx
cntkx只适用于python>;=3.6
可用组件
<表><广告>标量
cumsum
上采样
中央作物
旋转
hardmax
erf
gelu_fast
sequence.pad
序列.长度
顺序.位置
序列.步幅
序列.连接
沿序列轴连接两个序列
序列窗口
顺序。反转
序列。降低平均值
随机。示例
随机。样本顶部k
batchmatmul
qrnn
重复性
变量droppout
金字塔循环
变量退出
位置嵌入
bertembeddings
spacealpyramidpooling
网关线性单元
scaleDotProductAttention
multiheadattention
高斯i窗口注意
顺序最大池
顺序平均池
vfsmn
cfsmn
weightdroppedlsm
indylstm
indrnn
使用SoftMax的焦点丢失
将熵与软最大值交叉
标签平滑正则化
vgg
unet
mdn
bert
cyclicallerningrate
ctcencoder
C CNTK教程
这个库是用纯cntk python api实现的。有关cntk c_的帮助,可以参考两个存储库 使用csharp和cntk进行深入学习 以及deepfestive\u course4示例
f cntk
有关cntk的f包装,请访问fscntk, 它还包含一些示例实现,如seq2seq、autoencoder、lstm、gan。
新闻
2019年8月29日。
添加了预训练Wikitext103LanguageModel
快速人工智能通用语言模型微调(ulmfit)英文的cntk实现模型已添加。 这个语言模型是在wikitext-103上训练的,可以用作任何下游语言任务的基础模型。
与bert和其他transformer语言模型相比,运行它也更加高效。
有关更多详细信息,请参阅此处的原始论文 示例: 2019-08-08。 增加了两个cntk实现的 高斯误差线性单元(gelu),一种高性能的神经网络激活函数。
Gelu非线性是随机正则化子的期望变换
将标识或零映射应用于神经元的输入。Gelu非线性权重输入
数量级,而不是像relus那样通过符号输入门。 有关更多详细信息,请参阅高斯误差线性单位(GElu)
由亨德里克斯和吉佩尔撰写。 2019-07-04。 计算沿动态顺序轴的平均值,单位为cntk。 2019年6月26日。 允许沿序列轴反转序列项。如果要创建
双向自回归层,因为使用UnfoldFrom不适用于递归(go_backwards=true)和
将导致值错误。 示例: 解决方法是: 2019年6月21日。 它的cntk实现允许对顶部的非正规对数概率分布进行采样。
这是一种有用的文本(或序列)生成方法,已知贪婪解码会导致
文本退化。 示例: 2019-05-04。 双向矢量前向顺序存储网络(vfsmn)的cntk实现
以及紧凑的前馈顺序存储网络(CFSMN)。 fsmn是一种标准的全连接前向神经网络
在它的隐藏层中有一些可学习的内存块。内存块
使用抽头延迟线结构将长上下文信息编码为
作为短期记忆机制的固定大小表示。 作者声称,fsmns比
rnns或lstms由于固有的非递归模型结构而显著
在语言和语音建模方面优于RNN。 有关更多详细信息,请参阅前馈SE顺序记忆网络
学习长期依赖性的新结构
<表><广告>vocab_size = 238462
converted_hdf5_model_file_path = 'PATH/fwd_wt103.hdf5' # this is not the original pytorch model
lm = PretrainedWikitext103LanguageModel(converted_hdf5_model_file_path)
a = C.sequence.input_variable(vocab_size)
prediction = lm(a) # next-word-prediction
features = prediction.features # features of tokens
assert prediction.shape == (vocab_size, )
assert features.shape == (400, )
< /广告><正文>型号
说明
前进档wt103.hdf5 Fastai的Pythorch模型的权重参数。用于初始化预训练Wikitext103LanguageModel
前进方向wt103.cntk fastai的pytorch模型的转换cntk模型。与C.LOAD U型号一起使用 fwd\u wt103.onnx Fastai的Pythorch模型的转换OnNX模型。 增加了
cntkx.ops.gelu
和cntkx.ops.gelu快
gelu
激活功能。gelu
激活用于bert
以及openai的gpt
和gpt-2
增加了
cntkx.ops.sequence.reduce_mean
添加了
cntkx.ops.sequence.reverse
import cntk as C
import cntkx as Cx
from cntk.layers import Recurrence, UnfoldFrom, LSTM
hidden_dim = 50
start_token = C.Constant(0, shape=(hidden_dim,))
a = C.sequence.input_variable(1, name='seq1')
b = UnfoldFrom(Recurrence(LSTM(hidden_dim), go_backwards=True))(start_token, a)
n = [np.random.random((10, hidden_dim)).astype(np.float32),]
# This raise 'ValueError: It is not allowed to have multiple different stepping directions in the same loop'
b.eval({b.arguments[0]: n})
import cntk as C
import cntkx as Cx
from cntk.layers import Recurrence, UnfoldFrom, LSTM
hidden_dim = 50
start_token = C.Constant(0, shape=(hidden_dim,))
a = C.sequence.input_variable(1, name='seq1')
a_reversed = Cx.sequence.reverse(a)
b = UnfoldFrom(Recurrence(LSTM(hidden_dim)))(start_token, a_reversed) # remove go_backwards=True
n = [np.random.random((10, hidden_dim)).astype(np.float32),]
b.eval({b.arguments[0]: n}) # this will run just fine
添加了
cntkx.ops.random.sample_top_k
import cntk as C
import cntkx as Cx
a = C.input_variable(5)
b = Cx.random.sample_top_k(a, k=3, num_classes=5)
n = np.array([[1, 2, 3, 4, 5],] * 1000)
results = b.eval({a: n})
assert np.sum(results[:, :2]) == 0
assert np.sum(results[:, 2:]) == 1000
添加了
cntkx.layers.vfsmn
和cntkx.layers.cfsmn
cfsmn是fsmn的一个紧凑版本,它可以减少up 模型尺寸达到60%,学习速度提高7倍以上 在这两个方面仍然明显优于流行的双向lstms 基于帧级交叉熵(ce)准则的训练和基于mmi的序列训练。
有关更多详细信息,请参阅 Zhang等人的"大型词汇连续语音识别"
示例:
import cntk as C
from cntkx.layers import vFSMN, cFSMN
# unidirectional vFSMN (only past conext used)
a = C.sequence.input_variable(10)
b = vFSMN(100, C.relu, num_past_context=3, num_future_context=0)(a)
assert b.shape == (100,)
# bidirectional vFSMN (enable both past and future context)
a = C.sequence.input_variable(10)
b = vFSMN(120, C.relu, num_past_context=3, num_future_context=3)(a)
assert b.shape == (120,)
# bidirectional cFSMN (enable both past and future context)
a = C.sequence.input_variable(100)
b = cFSMN(120, 50, C.relu, num_past_context=3, num_future_context=3)(a)
assert b.shape == (120,)
2019年4月19日。
添加了cntkx.misc.ctcencoder
cntk的ctc实现要求以一种特殊的方式格式化数据,这种方式通常是在声学中 建模,但在其他应用中不常见。所以类提供了一种在 用户通常的期望和CNTK的要求。
<示例: 标签=['a','b','c'] 编码器=CTCENCoder(标签)labels_tensor = C.sequence.input_variable(len(encoder.classes_)) # number of classes = 4
input_tensor = C.sequence.input_variable(100)
labels_graph = cntk.labels_to_graph(labels_tensor)
network_out = model(input_tensor)
fb = C.forward_backward(labels_graph, network_out, blankTokenId=encoder.blankTokenId)
ground_truth = ['a', 'b', 'b', 'b', 'c']
seq_length = 10 # must be the same length as the sequence length in network_out
fb.eval({input_tensor: [...],
labels_tensor: [encoder.transform(ground_truth, seq_length=seq_length)]})
2019年4月14日。
添加了标签平滑正则化
,序列窗口
和金字塔递归
添加了标签平滑正则化
在
与软最大值的交叉熵中。
添加了sequence.window,它沿着序列轴创建不重叠的窗口,从而减少
序列长度,并以相同的系数增大尺寸。
实现了一个用于声学建模的便利层,称为"金字塔递归"。用于创建 金字塔双向lstm(blstm)在chan等人的《听、听、拼》中发现。(https://arxiv.org/abs/1508.01211" rel="nofollow">https://arxiv.org/abs/1508.01211) 通常用于向下采样序列长度,以使内存和运行时易于管理。
2019-04-08。
添加了cntkx.ops.sequence.join
添加了一个新的op
称为join
其中两个序列张量可以与序列轴一起连接,形成一个较长的序列。
2019-04-08。
添加了cntkx.layers.sequentialAveragePooling
添加与顺序轴一起工作的平均池层。当前的cntk平均池
不跨序列元素池。
关于 2019-04-07。 2019-04-06。 cntk实现独立复发的长期短期记忆细胞:indylstms
通过gonnet和deselaers,以及独立递归神经网络(indrnn):构建一个更长更深的rnn
作者:Li等人
indylstmcntkx.layers.sequentialAveragePooling的示例
和indrnn都隐藏了作为对角矩阵而不是通常的全矩阵的隐藏权重。
因此,每一层中的神经元彼此独立,并且跨通道信息是
通过多层叠加获得。# rgb image of height 25 and variable width
a = C.sequence.input_variable((3, 25))
# Convolute across image with (3, 3) kernel with stride (1, 1)
b = C.layers.SequentialConvolution(filter_shape=(3, 3), num_filters=16, stride=(1, 1), pad=True)(a)
assert b.shape == (16, 25)
# max pool (2,2) in height and width with stride (2,2) in height and width, no padding
c = SequentialAveragePooling(filter_shape=(2, 2), strides=(2, 2), pad=False)(b)
assert c.shape == (16, 12)
添加了
cntkx.sequence.stride
和cntkx.ops.scalar
cx.sequence.stride
启用跨序列轴的跨距,选择序列中的每个整数项。
cx.scalar
将张量转换为形状的标量(1,)
增加了
indylstm
和indrnn
indrnn
允许使用c.relu
激活,从而允许将多个indrnn
层深度堆叠在一起。
indylstm
的参数与线性中的节点数成线性关系,而不是标准的二次型lstm
使indylstm作为一个模型可能更快更小。
indrnn和indylstm的作者都声称性能与甚至比普通的LSTM更好。
示例:
import cntk as C
from cntkx.layers import IndyLSTM, IndRNN, Recurrence
a = C.sequence.input_variable(10)
b = Recurrence(IndRNN(20))(a)
c = Recurrence(IndyLSTM(20))(a)
assert b.shape == c.shape == (20,)
2019年3月24日。
添加了cntkx.layers.sequentialMaxPooling
添加与顺序轴一起工作的最大池层。当前cntkmaxpooling
不跨序列元素进行池。
关于 2019年3月18日。 循环学习率(CLR)的实现实际上消除了
通过实验找出全球学习率的最佳值和时间表。 这种方法不是单调地降低学习率,而是让学习 有关更多详细信息,请参见神经网络训练的周期学习率
作者:Leslie N.Smith
通过仅添加两行代码,此CLR实现可与CNTK训练循环一起使用
2019年3月12日。 增加了批量矩阵乘法。这个实现是类似的
tensorflow.matmul 示例: 2019-03-10。 伯特,最先进的语言模型现在可以作为cntk预训练模型使用。 目前,它只被测试为与 当您下载了 这三个文件是: 下面的示例 关于bert的更多细节,您可以在这里找到原始的论文,
以及一些有用的资源,请点击这里
以及此处 2019-03-06。 cntk实现 google ai的预先训练的bert tensorflow模型可以在这里下载。
如果您打算使用 例如 2019-03-02. 在
辍学在递归神经网络中的理论应用
以及Salesforce研究论文中提出的
规范和优化LSTM语言模型cntkx.layers.sequentialMaxPooling的示例
应用到序列相反
这将导致序列轴上的每个张量都有一个不同的丢失掩码。
0
pip install cntkx
添加了
cntkx.learners.cyclicallerningrate
速率在合理的边界值之间周期性地变化。培训
循环学习率而不是固定值实现了改进的分类
准确无需调整,而且通常迭代次数更少。
1
pip install cntkx
添加了
cntkx.ops.batchmatmul
2
pip install cntkx
增加了
预训练BertEncoder
和预训练BertModel
bert base,uncased
(uncased U L-12 U H-768 U A-12)一起工作,并且可以
下载自谷歌人工智能bert base,uncased
之后,里面应该有5个文件。您需要.zip
将其中三个文件加载到tensorflow检查点文件中,然后才能将其加载到cntkx
bert_model.ckpt.data-00000-of-00001
,bert_model.ckpt.index
,bert_model.ckpt.meta
。
然后将.zip
的扩展名重命名为.ckpt
,您就可以开始了。
3
pip install cntkx
添加了
位置嵌入
,BertEmbeddings
和预训练BertEmbeddings
位置嵌入
,bertembeddings
和tf-to-cntk预训练bertembeddings
。
bert是google人工智能中最先进的语言模型,更多细节可以在
bert:语言理解的深度双向转换器的预培训pretrainedbertembeddings
,则需要在您的环境中安装tensorflow
获取TensorFlow模型并将其转换为CNTK。po示例位置嵌入
4
pip install cntkx
bertembeddings
5
pip install cntkx
预训练BertEmbeddings的示例
6
pip install cntkx
添加了
变量输出
和权重输出
权重降低的lstm是一个正则的lstm,它使用dropconnect on hidden to hidden weights作为递归形式
正规化。它还包括变分辍学在递归单元的输入和输出上的应用
以便进一步规范化。
变分drpout
是一个正则化,在每个时间步使用相同的辍学掩码
(即穿过动态序列轴)与简单的将c.layers.dropout
pip install cntkx
7
2019-02-02.
添加选通线性单元/选通CNN
CNTK实现门控线性单元(门控CNN)在Facebook人工智能研究实验室论文中发表: 使用选通卷积网络的语言建模。 本文将卷积方法应用于一种新的门控cnn模型的语言建模。
pip install cntkx
8
2019-01-21。
添加了用于多类和二进制分类的焦点丢失
CNTK实现的焦距损失能够在 存在大量简单的背景示例或具有极端类不平衡的数据集(例如1:1000)。
焦点丢失
将训练重点放在一组稀疏的硬示例上,并防止大量容易出现的负面效果
在训练中压倒模特。
2019-01-16。
添加了空间金字塔池层
空间金字塔池层是一个池层,不管 图像大小/比例。它常用于多尺寸图像的训练。它报告了sota分类结果,使用 无需微调的单个完整图像表示。关于报纸的更多细节 "深卷积网络中的空间金字塔池用于视觉识别",作者:K.He,X.Zhang,S.Ren,J.Sun, 链接她E
vocab_size = 238462
converted_hdf5_model_file_path = 'PATH/fwd_wt103.hdf5' # this is not the original pytorch model
lm = PretrainedWikitext103LanguageModel(converted_hdf5_model_file_path)
a = C.sequence.input_variable(vocab_size)
prediction = lm(a) # next-word-prediction
features = prediction.features # features of tokens
assert prediction.shape == (vocab_size, )
assert features.shape == (400, )
1
2019-01-15。
增加了正弦位置嵌入和cntkx.ops.erf
增加了用于变压器的正弦位置嵌入。对于无障碍 关于变压器的说明,您可以在这里查找
vocab_size = 238462
converted_hdf5_model_file_path = 'PATH/fwd_wt103.hdf5' # this is not the original pytorch model
lm = PretrainedWikitext103LanguageModel(converted_hdf5_model_file_path)
a = C.sequence.input_variable(vocab_size)
prediction = lm(a) # next-word-prediction
features = prediction.features # features of tokens
assert prediction.shape == (vocab_size, )
assert features.shape == (400, )
2
添加了cntkx.ops.erf
错误函数。
2019-01-12。
增加了视觉模型:vgg16、vgg19和unet
vgg用于图像分类,unet用于语义分割。vgg的实现是为了完整性 清酒,不应用于任何严重的分类任务。
关于vgg的论文可以在这里找到,标题是"非常深的卷积网络"。 用于大规模图像识别"
UNET的论文可以在这里找到 用于生物医学图像分割"
VGG示例:
vocab_size = 238462
converted_hdf5_model_file_path = 'PATH/fwd_wt103.hdf5' # this is not the original pytorch model
lm = PretrainedWikitext103LanguageModel(converted_hdf5_model_file_path)
a = C.sequence.input_variable(vocab_size)
prediction = lm(a) # next-word-prediction
features = prediction.features # features of tokens
assert prediction.shape == (vocab_size, )
assert features.shape == (400, )
3
例如:
vocab_size = 238462
converted_hdf5_model_file_path = 'PATH/fwd_wt103.hdf5' # this is not the original pytorch model
lm = PretrainedWikitext103LanguageModel(converted_hdf5_model_file_path)
a = C.sequence.input_variable(vocab_size)
prediction = lm(a) # next-word-prediction
features = prediction.features # features of tokens
assert prediction.shape == (vocab_size, )
assert features.shape == (400, )
4
还添加了方便功能,如cntkx.ops.upsample
和centre_crop
。
cntkx.ops.upsample
在每个空间维度上对图像进行两次上采样。居中裁剪
从
中间较大的一个,给一个参考较小的图像。
增加了变压器注意模型和相关组件
变压器首先在文件中介绍。 该架构完全基于注意机制,完全不需要递归和卷积。 最近,打破了几乎所有SOTA语言任务的bert也基于 变形金刚和自我关注。
vocab_size = 238462
converted_hdf5_model_file_path = 'PATH/fwd_wt103.hdf5' # this is not the original pytorch model
lm = PretrainedWikitext103LanguageModel(converted_hdf5_model_file_path)
a = C.sequence.input_variable(vocab_size)
prediction = lm(a) # next-word-prediction
features = prediction.features # features of tokens
assert prediction.shape == (vocab_size, )
assert features.shape == (400, )
5
2018年12月8日。
增加了qrnn:准递归神经网络(qrnn)和cntkx.ops.cumsum
qrnn提供与lstm相似的精度,但可以比lstm快2到17倍。 高度优化的nvidia cudnn lstm实现取决于用例。
vocab_size = 238462
converted_hdf5_model_file_path = 'PATH/fwd_wt103.hdf5' # this is not the original pytorch model
lm = PretrainedWikitext103LanguageModel(converted_hdf5_model_file_path)
a = C.sequence.input_variable(vocab_size)
prediction = lm(a) # next-word-prediction
features = prediction.features # features of tokens
assert prediction.shape == (vocab_size, )
assert features.shape == (400, )
6
2018年12月7日。
新序列操作:cntkx.ops.sequence.pad
和cntkx.ops.sequence.length
添加了两个新的序列操作。cntkx.ops.sequence.pad
允许在序列轴和
cntkx.ops.sequence.length
计算序列的长度。
2018年12月5日。
混合密度网络
混合密度网络是一种神经网络,原则上可以表示任意条件 概率分布与传统神经网络可以表示任意函数的方式相同。 当您需要将一个输入映射到几个正确的目标(aka)时,mdn非常有用。一对多问题)。
使用高斯混合密度网络操作和损失函数进行更新。ops将允许您从网络中提取mdn系数和样本。
有关MDN的更多详细信息,请参阅Christopher Bishop的论文。
vocab_size = 238462
converted_hdf5_model_file_path = 'PATH/fwd_wt103.hdf5' # this is not the original pytorch model
lm = PretrainedWikitext103LanguageModel(converted_hdf5_model_file_path)
a = C.sequence.input_variable(vocab_size)
prediction = lm(a) # next-word-prediction
features = prediction.features # features of tokens
assert prediction.shape == (vocab_size, )
assert features.shape == (400, )
7