微软认知工具包扩展库

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

可用组件

<表><广告><行动>说明 < /广告><正文>标量将张量转换为标量(1,)cumsum沿轴的累积总和上采样向上采样2倍(用于图像)中央作物图像裁剪中心旋转激活hardmax激活erf错误函数格鲁语 高斯误差线性单位函数gelu_fast高斯误差线性单位函数的快速逼近sequence.pad序列轴开始或结束处的焊盘序列.长度序列长度顺序.位置每个序列元素的位置序列.步幅跨过顺序轴的跨步序列.连接 沿序列轴连接两个序列序列窗口沿序列轴创建非重叠窗口顺序。反转沿动态序列轴反转项目序列。降低平均值计算沿动态序列轴的平均值随机。示例对非标准对数概率分布进行采样随机。样本顶部k来自非标准对数概率分布顶部的样本batchmatmul静态批处理轴上的批处理矩阵乘法,类似于tf.matmul<表><广告>层 说明 < /广告><正文>qrnn准递归神经网络重复性可选择应用变量droppout金字塔循环金字塔双向递归变量退出整个序列的单个二进制输出掩码正弦波位置嵌入 不可学习的位置嵌入(无最大序列长度)位置嵌入可学习的位置嵌入(用于bert)bertembeddingsbert嵌入(word+token_type+positional)伯特普尔 在bert中使用的poolerspacealpyramidpooling不管图像输入大小,固定的池表示法网关线性单元门控卷积神经网络scaleDotProductAttentionbert和transformer中使用的注意(也称为"注意就是你所需要的)"multiheadattentionbert和transformer中使用的注意(也称为"注意就是你所需要的)"高斯i窗口注意有窗口的注意力,而不是传统的注意力,在这种情况下,所有的事情都是同时进行的顺序最大池连续轴和静态轴上的最大池顺序平均池连续轴和静态轴上的平均池vfsmn矢量化前向顺序存储网络cfsmn紧凑型前馈顺序存储器网络<表><广告>块说明 < /广告><正文>weightdroppedlsm正则lstm的一种形式indylstmlstm的一种参数有效形式indrnn具有长内存的RNN,可以深度堆叠<表><广告>损失 说明 < /广告><正文>高斯损耗 使用混合密度网络时的损失函数使用SoftMax的焦点丢失一种处理极端类不平衡的交叉熵将熵与软最大值交叉在带SoftMax的交叉熵中添加了标签平滑正则化 <表><广告>型号 说明 < /广告><正文>vgg图像分类unet语义分割变压器 语言建模mdn混合密度网络<表><广告>预先训练的模型 说明 < /广告><正文>bert来自变压器的双向编码器表示前进档wt103.hdf5Fastai的Pythorch模型的权重参数。用于初始化预训练Wikitext103LanguageModel 前进方向wt103.cntkfastai的pytorch模型的转换cntk模型。与C.LOAD U型号一起使用fwd\u wt103.onnxFastai的Pythorch模型的转换OnNX模型。<表><广告>学习者 说明 < /广告><正文>cyclicallerningrate一种消除寻找最佳学习率价值和时间表的方法<表><广告>其他说明 < /广告><正文>ctcencoderhelper类将数据转换为cntk的ctc实现可接受的格式

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语言模型相比,运行它也更加高效。

有关更多详细信息,请参阅此处的原始论文

示例:

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.hdf5Fastai的Pythorch模型的权重参数。用于初始化预训练Wikitext103LanguageModel 前进方向wt103.cntkfastai的pytorch模型的转换cntk模型。与C.LOAD U型号一起使用
fwd\u wt103.onnxFastai的Pythorch模型的转换OnNX模型。

2019-08-08。

增加了cntkx.ops.gelucntkx.ops.gelu快

增加了两个cntk实现的gelu激活功能。gelu激活用于bert 以及openai的gptgpt-2

高斯误差线性单元(gelu),一种高性能的神经网络激活函数。 Gelu非线性是随机正则化子的期望变换 将标识或零映射应用于神经元的输入。Gelu非线性权重输入 数量级,而不是像relus那样通过符号输入门。

有关更多详细信息,请参阅高斯误差线性单位(GElu) 由亨德里克斯和吉佩尔撰写。

2019-07-04。

增加了cntkx.ops.sequence.reduce_mean

计算沿动态顺序轴的平均值,单位为cntk。

2019年6月26日。

添加了cntkx.ops.sequence.reverse

允许沿序列轴反转序列项。如果要创建 双向自回归层,因为使用UnfoldFrom不适用于递归(go_backwards=true)和 将导致值错误。

示例:

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

2019年6月21日。

添加了cntkx.ops.random.sample_top_k

它的cntk实现允许对顶部的非正规对数概率分布进行采样。 这是一种有用的文本(或序列)生成方法,已知贪婪解码会导致 文本退化。

有关这方面的更多详细信息,请参阅一个神经文本退化的奇怪案例

示例:

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

2019-05-04。

添加了cntkx.layers.vfsmncntkx.layers.cfsmn

双向矢量前向顺序存储网络(vfsmn)的cntk实现 以及紧凑的前馈顺序存储网络(CFSMN)。

fsmn是一种标准的全连接前向神经网络 在它的隐藏层中有一些可学习的内存块。内存块 使用抽头延迟线结构将长上下文信息编码为 作为短期记忆机制的固定大小表示。

作者声称,fsmns比 rnns或lstms由于固有的非递归模型结构而显著 在语言和语音建模方面优于RNN。

有关更多详细信息,请参阅前馈SE顺序记忆网络 学习长期依赖性的新结构

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平均池不跨序列元素池。

关于cntkx.layers.sequentialAveragePooling的示例

# 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)

2019-04-07。

添加了cntkx.sequence.stridecntkx.ops.scalar

cx.sequence.stride启用跨序列轴的跨距,选择序列中的每个整数项。 cx.scalar将张量转换为形状的标量(1,)

2019-04-06。

增加了indylstmindrnn

cntk实现独立复发的长期短期记忆细胞:indylstms 通过gonnet和deselaers,以及独立递归神经网络(indrnn):构建一个更长更深的rnn 作者:Li等人

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不跨序列元素进行池。

关于cntkx.layers.sequentialMaxPooling的示例

pip install cntkx
0

2019年3月18日。

添加了cntkx.learners.cyclicallerningrate

循环学习率(CLR)的实现实际上消除了 通过实验找出全球学习率的最佳值和时间表。

这种方法不是单调地降低学习率,而是让学习
速率在合理的边界值之间周期性地变化。培训
循环学习率而不是固定值实现了改进的分类 准确无需调整,而且通常迭代次数更少。

有关更多详细信息,请参见神经网络训练的周期学习率 作者:Leslie N.Smith

通过仅添加两行代码,此CLR实现可与CNTK训练循环一起使用

pip install cntkx
1

2019年3月12日。

添加了cntkx.ops.batchmatmul

增加了批量矩阵乘法。这个实现是类似的 tensorflow.matmul

示例:

pip install cntkx
2

2019-03-10。

增加了预训练BertEncoder预训练BertModel

伯特,最先进的语言模型现在可以作为cntk预训练模型使用。

目前,它只被测试为与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-00001bert_model.ckpt.indexbert_model.ckpt.meta。 然后将.zip的扩展名重命名为.ckpt,您就可以开始了。

下面的示例

pip install cntkx
3

关于bert的更多细节,您可以在这里找到原始的论文, 以及一些有用的资源,请点击这里 以及此处

注: 不用说,要使用这些预先训练过的模型,您需要安装tensorflow 因为我们是从TensorFlow模型转换过来的。

2019-03-06。

添加了位置嵌入BertEmbeddings预训练BertEmbeddings

cntk实现位置嵌入bertembeddings和tf-to-cntk预训练bertembeddings。 bert是google人工智能中最先进的语言模型,更多细节可以在 bert:语言理解的深度双向转换器的预培训

google ai的预先训练的bert tensorflow模型可以在这里下载。 如果您打算使用pretrainedbertembeddings,则需要在您的环境中安装tensorflow 获取TensorFlow模型并将其转换为CNTK。

po示例位置嵌入

pip install cntkx
4

例如bertembeddings

pip install cntkx
5

预训练BertEmbeddings的示例

pip install cntkx
6

2019-03-02.

添加了变量输出权重输出

辍学在递归神经网络中的理论应用 以及Salesforce研究论文中提出的 规范和优化LSTM语言模型

权重降低的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)。

焦点丢失将训练重点放在一组稀疏的硬示例上,并防止大量容易出现的负面效果 在训练中压倒模特。

有关更多详细信息,请参阅密集目标检测的焦距损失

pip install cntkx
9

2019-01-18。

增加了高斯窗注意模型

高斯窗口注意模型是由alex graves在 "使用递归神经网络生成序列"。

它使用混合高斯窗口来处理 序列中与广泛使用的注意模型相对应的部分 Bahdanau等人通过"联合学习对齐和翻译的神经机器翻译"。出席者 一次完成整个序列。

高斯窗口注意在上下文序列上也是有方向性的。建模时 强有序序列,高斯窗注意将是一个自然的选择,由于这种归纳偏差。

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, )
0

"使用递归神经网络生成序列"可以在这里找到。 "通过联合学习对齐和翻译的神经机器翻译"可以找到:"HRFF="HTTPS://ARXV.OR/ABS/1409043]"Re="NoFoLoLy">这里

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.upsamplecentre_cropcntkx.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.padcntkx.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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
无法在Netbeans 8.2 JDK8u231中创建java Maven项目(Web应用程序)   java如何以设定的时间间隔生成随机数?   java从socket和inputStream的慢速读取   spring SCORM:Java中基于Web的SCORM播放器   Java将函数传递给方法   java绑定通用服务及其实现和子类型   java如何在运行时从选择列表框中动态选择选项?爪哇硒   java Selenium WebDriver什么是“Selenium客户端和WebDriver语言绑定”   elasticsearch需要elasticsearch高级Java客户端更新ByQueryRequest API帮助   JAVA哈希表查找最大值   WSDL操作中的java soapAction属性为空   java访问封闭类或父类方法的一般方法   eclipse在java中运行带有SeleneTestCase的ANT。lang.NoClassDefFoundError   java Hazelcast不会在节点启动时填充ReplicatedMap   如何在Java中从excel中读取特定行?   html JAVA将本地时间(GMT+8)转换为UTC时间   java将自定义端点添加到Spring数据REST存储库中,并以大摇大摆的方式显示   java计算未来位置