你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

CNTK库 C# API

CNTK库托管 API 在 C# 中实现,可由 C# 和其他 .NET 语言使用。 使用 CNTK 库托管 API将 CNTK 与 C# 配合使用的页面演示了如何在应用程序中使用此 API。 以下部分介绍CNTK库托管 Eval API 的类和方法。

CNTKLib 类

这是一个静态类包含许多操作、初始化和许多杂项方法。


public static Function Negate(Variable operand, string name = "");

使用指定的输入操作数创建CNTK内置反元素操作的实例。 参数:

  • operand:输入变量。 它可以是另一个函数的 ouput。
  • name:操作的名称。

public static Function Sigmoid(Variable operand, string name = "")

Sigmoid 操作。 它采用输入变量并应用 Sigmoid 操作。

参数:

  • operand:输入变量。 它可以是另一个函数的 ouput。
  • name:操作的名称。

public static Function Tanh(Variable operand, string name)

Tanh 激活。 它采用输入变量并应用 Tanh 操作。

参数:

  • operand:输入变量。 它可以是另一个函数的 ouput。
  • name:操作的名称。

public static Function Asin(Variable operand, string name = "");

使用指定的输入操作数创建CNTK内置 asin 操作的实例。

参数:

  • operand:输入变量。 它可以是另一个函数的 ouput。
  • name:操作的名称。

public static Function Sin(Variable operand, string name = "");

使用指定的输入操作数创建CNTK内置元素正弦运算的实例。 参数:

  • operand:输入变量。 它可以是另一个函数的 ouput。
  • name:操作的名称。

public static Function Acos(Variable operand, string name = "");

使用指定的输入操作数创建CNTK内置 acos 操作的实例。

  • operand:输入变量。 它可以是另一个函数的 ouput。
  • name:操作的名称。

public static Function Cos(Variable operand, string name = "");

使用指定的输入操作数创建CNTK内置元素余弦运算的实例。

  • operand:输入变量。 它可以是另一个函数的 ouput。
  • name:操作的名称。

public static Function Cosh(Variable operand, string name = "");

使用指定的输入操作数创建CNTK内置元素协同操作的实例。

  • operand:输入变量。 它可以是另一个函数的 ouput。
  • name:操作的名称。

public static Function Sinh(Variable operand, string name = "");

使用指定的输入操作数创建CNTK内置元素 sinh 操作的实例。

  • operand:输入变量。 它可以是另一个函数的 ouput。
  • name:操作的名称。

public static Function ReLU(Variable operand, string name = "")

整形器线性激活。 它采用输入变量并应用整形器线性激活操作。

  • operand:输入变量。 它可以是另一个函数的 ouput。
  • name:操作的名称。

public static Function Exp(Variable operand, string name = "");

使用指定的输入操作数创建CNTK内置元素 exp 操作的实例。

  • operand:输入变量。 它可以是另一个函数的 ouput。
  • name:操作的名称。

public static Function Log(Variable operand, string name = "");

使用指定的输入操作数创建CNTK内置元素日志操作的实例。

  • operand:输入变量。 它可以是另一个函数的 ouput。
  • name:操作的名称。

public static Function Square(Variable operand, string name = "");

使用指定的输入操作数创建CNTK内置元素方运算的实例。

  • operand:输入变量。 它可以是另一个函数的 ouput。
  • name:操作的名称。

public static Function Sqrt(Variable operand, string name = "");

使用指定的输入操作数创建CNTK内置元素平方根操作的实例。

  • operand:输入变量。 它可以是另一个函数的 ouput。
  • name:操作的名称。

public static Function Softmax(Variable operand, Axis axis, string name = "")

在指定的张量输入操作数参数上,在指定轴上创建CNTK内置 softmax 操作的实例:

  • operand:操作的输入变量。 它可以是另一个函数的 ouput。
  • axis:要应用 softmax 操作的轴
  • name:操作的名称。

public static Function Hardmax(Variable operand, string name = "");

在指定的张量输入操作数上创建CNTK内置 hardmax 操作的实例

  • operand:输入变量。 它可以是另一个函数的 ouput。
  • name:操作的名称。

public static Function Transpose(Variable operand, string name = "");

在指定的 1D 或 2D 输入操作数上创建CNTK内置转置操作的实例

  • operand:输入变量。 它可以是另一个函数的 ouput。
  • name:操作的名称。

public static Function Dropout(Variable operand, dropoutRate, uint seed, string name = "");

在指定的张量输入操作数上创建拖放操作的实例

  • operand:输入变量。 它可以是另一个函数的 ouput。
  • dropoutRate:
  • seed:
  • name:操作的名称。

public static Function Reshape(Variable operand, NDShape replacementShape, Axis beginAxis, Axis endAxis, string name = "");

在指定的张量输入操作数上创建整形操作的实例


public static Function Times(Variable leftOperand, Variable rightOperand, string name = "");

使用指定的输入操作数创建CNTK内置张量乘法运算的实例。


public static Function TransposeTimes(Variable leftOperand, Variable rightOperand, uint outputRank, string name = "");

使用左输入操作数和指定的右操作数的转置创建CNTK内置矩阵乘法运算的实例。 仅接受排名 1 或 2 的左操作数。


public static Function Plus(Variable leftOperand, Variable rightOperand, string name = "")

二元元素张量加法运算。 参数:

  • leftOperand:加号操作的左变量。 它可以是另一个函数的 ouput。
  • rightOperand:加号操作的左变量。 它可以是另一个函数的 ouput。
  • name:操作的名称。

public static Function Minus(Variable leftOperand, Variable rightOperand, string name = "");

使用指定的输入操作数创建CNTK内置张量减法运算的实例。


public static Function LogAddExp(Variable leftOperand, Variable rightOperand, string name = "");

创建CNTK内置元素张量运算的实例,用于计算指定输入操作数指数之和的日志。


public static Function Pow(Variable leftOperand, Variable rightOperand, string name = "");

创建一个CNTK内置元素张量运算的实例,该运算计算向右操作数的力量引发的 leftOperand。


public static Function ElementTimes(Variable leftOperand, Variable rightOperand, string name = "");

在指定的张量输入操作数上创建CNTK内置元素乘法运算的实例。


public static Function ElementDivide(Variable leftOperand, Variable rightOperand, string name = "");

在指定的张量输入操作数上创建CNTK内置元素除法运算的实例。


public static Function CosineDistance(Variable leftOperand, Variable rightOperand, string name = "");

创建CNTK内置操作的实例,以计算指定输入操作数的余弦距离。


public static Function CosineDistanceWithNegativeSamples(Variable leftOperand, Variable rightOperand, uint shiftWindow, uint numberOfNegativeSamples, string name = "");

创建CNTK内置运算的实例,以计算指定输入操作数的负样本的余弦距离。


public static Function BinaryCrossEntropy(Variable prediction, Variable targets, string name = "");

创建CNTK内置操作的实例,以计算指定输入操作数的二进制交叉枚举。


public static Function WeightedBinaryCrossEntropy(Variable prediction, Variable targets, Variable weights, string name = "");

创建CNTK内置操作的实例,以计算指定输入操作数的加权二进制交叉乘法。


public static Function CrossEntropyWithSoftmax(Variable prediction, Variable labels, Axis axis, string name = "");

创建CNTK内置操作的实例,以使用 softmax 计算指定输入操作数的跨枚举。


public static Function ClassificationError(Variable prediction, Variable labels, uint topN, Axis axis, string name = "");

创建用于计算指定操作数的分类预测错误的CNTK内置操作的实例。


public static Function PastValue(Variable operand, Variable initialState, uint offset = 1, string name = "");

创建CNTK内置操作的实例,用于沿指定操作数的孤独动态轴获取过去的值。


public static Function FutureValue(Variable operand, Variable initialState, uint offset = 1, string name = "");

创建CNTK内置操作的实例,以便沿指定操作数的孤独动态轴获取未来值。


public static Function Convolution(Variable convolutionMap,
                                     Variable operand,
                                     NDShape strides = { 1 },
                                     BoolVector sharing = { true },
                                     BoolVector autoPadding = { true },
                                     NDShape dilation = { 1 },
                                     uint reductionRank = 1,
                                     uint maxTempMemSizeInSamples = 0,
                                     string name = "");

卷积


public static Function ROIPooling(Variable operand,
                                    Variable rois,
                                    PoolingType poolingType,
                                    NDShape roiOutputShape,
                                    double spatialScale,
                                    string name= "");

在具有指定输出形状的指定张量输入操作数上创建CNTK内置 ROI 池操作的实例


public static Function Pooling(Variable operand,
                                 PoolingType poolingType,
                                 NDShape poolingWindowShape,
                                 NDShape strides = {1},
                                 BoolVector autoPadding = {false},
                                 const bool ceilOutDim = false,
                                 const bool includePad = false,
                                 string name = "");

public static Function BatchNormalization(Variable operand,
                                            Variable scale,
                                            Variable bias,
                                            Variable runningMean,
                                            Variable runningInvStd,
                                            Variable runningCount,
                                            bool spatial,
                                            double normalizationTimeConstant = 0,
                                            double blendTimeConstant = 0,
                                            double epsilon = 0.00001,
                                            bool useCuDNNEngine = true,
                                            string name = "");

public static Function Splice(VariableVector operands, Axis axis, string name = "");

创建CNTK内置连接运算的实例,将所有指定的张量操作数合并到单个输出张量中


public static Function Combine(VariableVector operands, string name = "");

创建一个新的函数实例,该实例只合并指定“操作数”函数列表的输出,以便新“函数的输出”是每个指定“操作数”函数的“Outputs”的联合。 例如,创建分类模型时,通常 CrossEntropy loss 函数和 ClassificationError 函数构成计算图的两个根,该图可以“组合”创建具有 2 个输出的单个函数:即。 CrossEntropy loss 和 ClassificationError 输出。


public static Function LeakyReLU(Variable operand, string name = "");

使用指定的输入操作数创建CNTK内置元素泄漏线性整流器运算的实例。

类学习器

类函数

表示 Function 具有零个或多个输入参数和一个或多个输出的符号计算。 函数可以是基元或复合 (,由其他函数实例组成,其输入和输出) 连接在一起。 函数实际上是由其他基元函数组成的计算图, (将计算) 表示为节点和 Variable 对象, (将数据) 表示为图形的边缘和叶。

Function 类包含以下与评估相关的属性和方法:


public string Name { get; }

函数的名称。


public IList<Variable> Arguments { get; }

不是参数或常量类型的函数的所有输入变量的列表。 这些变量是计算函数输出所必需的输入。


public Variable Output { get; }

函数的单个输出变量(如果只有一个)。 否则,访问时会引发运行时异常。


public IList<Variable> Outputs { get; }

函数的所有输出变量的列表。


public Function RootFunction { get; }

返回函数基础函数的图根处的基元函数。 如果函数本身是基元函数,则 (this-RootFunction> () == 此) 。


public string OpName { get; }

函数表示的操作的名称。


public bool IsComposite { get; }

一个布尔值,指示函数是否为复合函数。


public bool IsPrimitive { get; }

一个布尔值,指示函数是否为基元函数。


public bool IsBlock { get; }

一个布尔值,该值指示函数是否为块函数。


public void Evaluate(IDictionary<Variable, Value> inputs, IDictionary<Variable, Value> outputs, DeviceDescriptor computeDevice)
public void Evaluate(IDictionary<Variable, Value> inputs, IDictionary<Variable, Value> outputs, bool createPersistentOutputValues, DeviceDescriptor computeDevice)

使用指定的输入计算函数。 它基于为字典中指定的inputs每个输入变量提供的值计算函数的输出。 输出存储在与字典中的输出变量对应的输出值中 outputs

参数:

  • inputs:函数的输入变量及其值。
  • outputs:每个输出变量的输出值。 调用方可以指定用于存储输出的 Value 对象,或传递 null 该方法为输出结果分配存储的情况。 在这两种情况下,返回时,Value 对象包含函数的相应输出的结果。 null如果指定了 Value,并且参数createPersistentOutputValues未指定或设置为 false,则该方法返回的 Value 对象是临时的,并且仅在下一次向前/向后调用之前保证有效。 如果需要稍后访问它,则应指定createPersistentOutputValuestrue或显式DeepClone访问临时 Value 对象。
  • computeDevice:执行计算的设备。 它应与加载模型的设备保持一致。
  • createPersistentOutputValues:仅在输出中指定了值时才 null 相关。 如果设置为 true,该方法将创建永久性 Value 对象,否则 Value 对象是临时的,并且仅在下一次向前/向后调用之前有效。

public Function Clone(ParameterCloningMethod parameterCloneMethod = ParameterCloningMethod.Share)

Clones this 函数。

参数:

  • parameterCloneMethod:指定如何克隆函数的参数: ParameterCloningMethod.Share - 参数在克隆的函数和新克隆之间共享。 如果克隆的函数用于并发计算,则应使用此值。 ParameterCloningMethod.Clone - 创建新的可学习参数,并使用正在克隆的函数的相应参数的当前值进行初始化。 ParameterCloningMethod.Freeze - 参数是克隆的,并且不可变;例如,新克隆中的常量 (,例如用作固定功能提取器) 。 ParameterCloningMethod 在此处定义。

public Function FindByName(string name, bool nestedSearchInsideBlockFunction)

在函数图中查找具有函数基础的给定名称的函数。 如果有多个具有相同名称的函数存在,则会引发异常。 如果 nestedSearchInsideBlockFunction 为 true,则搜索块函数中的所有函数。

参数:

  • name:要搜索的名称。
  • nestedSearchInsideBlockFunction:如果为 true,也会检查块函数中的所有函数。

public IList<Function> FindAllWithName(string name, bool nestedSearchInsideBlockFunction = false)

在函数图中查找具有函数基础的给定名称的函数的列表。 如果 nestedSearchInsideBlockFunction 为 true,则搜索块函数中的所有函数。

参数:

  • name:要搜索的名称。
  • nestedSearchInsideBlockFunction:如果为 true,也会检查块函数中的所有函数。

public static Function Load(string modelFile, DeviceDescriptor computeDevice)

从模型文件加载函数。

参数:

  • modelFile:模型文件的路径。
  • computeDevice:加载函数的设备。

public static Function Load(byte[] modelBuffer, DeviceDescriptor computeDevice)

从表示模型的内存缓冲区加载函数。

参数:

  • modelBuffer:字节数组包含序列化的模型内容。
  • computeDevice:加载函数的设备。

public static Function Combine(IEnumerable<Variable> operands)

创建一个新的函数实例,该实例合并函数的指定“操作数”列表的输出。 新的“Function”的“Outputs”是每个指定“操作数”函数的“Outputs”的联合。 例如,创建分类模型时,通常 CrossEntropy loss 函数和 ClassificationError 函数构成计算图的根,该图可以“合并”以创建具有 2 个输出的单个函数:即。 CrossEntropy loss 和 ClassificationError 输出。

参数:

  • operands:应包含在新函数的输出中的函数或变量的列表。

public static Function AsComposite(Function rootFunction, string name = "")

创建一个复合函数,该函数具有指定的 rootFunction 作为其根。 复合表示一个更高级别的函数,该函数封装了基于指定 rootFunction 的函数的整个图形。

参数:

  • rootFunction:要创建的复合函数的根。
  • name:要创建的复合函数的名称。

public static Function Alias(Variable operand, string name = "")

创建一个新的函数实例,该实例只是指定操作数的别名。

参数:

  • operand:为别名函数创建的函数或变量。
  • name:要创建的新函数的名称。

类值

A Value 是一个具有可选掩码的多维数组,是传入或从计算生成的实际数据。


以下方法使用具有指定张量形状的密集输入创建 Value 对象。


public static Value CreateBatch<T>(NDShape sampleShape, IEnumerable<T> batch, DeviceDescriptor device, bool readOnly = false)

创建包含一批样本的新 Value 对象。 批中的样本数是除以 (运行时错误的大小shape除以元素batch数(如果余数不是零) )。 创建的 Value 对象包含指定数据 batch的副本。

参数:

  • sampleShape:Value 对象的张量形状。
  • batch:要包含在 Value 对象中的数据。
  • device:应在哪个设备上创建 Value 对象。
  • readOnly:如果此标志为 true,则 Value 对象为只读对象。

public static Value CreateSequence<T>(NDShape sampleShape, IEnumerable<T> sequence, DeviceDescriptor device, bool readOnly = false)

创建包含样本序列的新 Value 对象。 创建的 Value 对象包含指定数据 sequence的副本。 序列长度是除以 (运行时错误的大小shape除以的元素sequence数(如果余数不是零) )。 创建的序列是一个新序列。

参数:

  • sampleShape:Value 的张量形状。
  • sequence:要包含在 Value 中的数据。
  • device:应在哪个设备上创建 Value 对象。
  • readOnly:如果此标志为 true,则值为只读。

public static Value CreateSequence<T>(NDShape sampleShape, IEnumerable<T> sequence, bool sequenceStartFlag, DeviceDescriptor device, bool readOnly = false)

创建包含样本序列的新 Value 对象。 创建的 Value 对象包含指定 sequence 数据的副本。 sequenceStartFlag 指定此序列是以前对此方法的调用中前一个序列的新序列还是延续。 序列长度是除以 (运行时错误的大小shape除以的元素sequence数(如果余数不是零) )。

参数:

  • sampleShape:Value 的张量形状。
  • sequence:要包含在 Value 中的数据。
  • sequenceStartFlagtrue 指示它是一个新序列。 false 表示上一个序列的延续。
  • device:应在哪个设备上创建 Value 对象。
  • readOnly:如果此标志为 true,则值为只读。

public static Value CreateBatchOfSequences<T>(NDShape sampleShape, IEnumerable<IEnumerable<T>> batchOfSequences, DeviceDescriptor device, bool readOnly = false)

创建包含一批可变长度序列的新 Value 对象。 创建的 Value 对象包含指定数据 batchOfSequences的副本。 批中的序列数是大小 batchOfSequences。 每个序列的长度是相应序列 batchOfSequencesshape 中除以 (如果余数不是零) ,则会发生运行时错误。 每个序列 batchOfSequences 都是一个新序列。

参数:

  • sampleShape:Value 的张量形状。
  • batchOfSequences:要存储在 Value 中的数据。 外部 IEnumerable 表示具有可变长度的序列集合,内部 IEnumerable 表示每个单独的序列。
  • device:应创建值的设备。
  • readOnly:如果此标志为 true,则值为只读。

public static Value CreateBatchOfSequences<T>(NDShape sampleShape, IEnumerable<IEnumerable<T>> batchOfSequences, IEnumerable<bool> sequenceStartFlags, DeviceDescriptor device, bool readOnly = false)

创建包含一批可变长度序列的新 Value 对象。 创建的 Value 对象包含指定数据 batchOfSequences的副本。 批中的序列数是大小 batchOfSequences。 每个序列的长度是相应序列 batchOfSequencesshape 中除以 (如果余数不是零) ,则会发生运行时错误。

参数:

  • sampleShape:Value 的张量形状。
  • batchOfSequences:要存储在 Value 中的数据。 外部 IEnumerable 表示具有可变长度的序列集合,内部 IEnumerable 表示每个单独的序列。
  • sequenceStartFlags:布尔值的集合。 每个元素表示在) 时是新序列 batchOfSequencestrue (,还是在) 的情况下 (上一个序列的 false 延续。
  • device:应创建值的设备。
  • readOnly:如果此标志为 true,则值为只读。

以下方法使用单热向量输入创建 Value 对象。


public static Value CreateBatch<T>(int dimension, IEnumerable<int> batch, DeviceDescriptor device, bool readOnly = false)

创建包含一批样本的新 Value 对象。 每个样本都由一个索引值表示,该值指向元素一热向量 dimension 中的非零值。 批中的样本数是批中的 batch元素数。

参数:

  • T:创建的 Value 对象的数据类型。 float double目前且受支持。
  • dimension:一热向量的尺寸。
  • batch:表示样本批的索引集合。
  • device:应在哪个设备上创建 Value 对象。
  • readOnly:如果此标志为 true,则值为只读。

public static Value CreateSequence<T>(int dimension, IEnumerable<int> sequence, DeviceDescriptor device, bool readOnly = false)

创建包含样本序列的新 Value 对象。 每个样本都由一个索引值表示,该值指向元素一热向量 dimension 中的非零值。 序列长度是元素数 sequence。 创建的序列是一个新序列。

参数:

  • T:创建的 Value 对象的数据类型。 float double目前且受支持。
  • dimension:一热向量的尺寸。
  • sequence:表示样本序列的索引集合。
  • device:应在哪个设备上创建 Value 对象。
  • readOnly:如果此标志为 true,则值为只读。

public static Value CreateSequence<T>(int dimension, IEnumerable<int> sequence, bool sequenceStartFlag, DeviceDescriptor device, bool readOnly = false)

创建包含样本序列的新 Value 对象。 每个样本都由一个索引值表示,该值指向元素一热向量 dimension 中的非零值。 sequenceStartFlag 指定此序列是以前对此方法的调用中前一个序列的新序列还是延续。 序列长度是元素数 sequence

参数:

  • T:创建的 Value 对象的数据类型。 float double目前且受支持。
  • dimension:一热向量的尺寸。
  • sequence:表示样本序列的索引集合。
  • sequenceStartFlagtrue 指示它是一个新序列。 false 表示上一个序列的延续。
  • device:应在哪个设备上创建 Value 对象。
  • readOnly:如果此标志为 true,则值为只读。

public static Value CreateBatchOfSequences<T>(int dimension, IEnumerable<IEnumerable<int>> batchOfSequences, DeviceDescriptor device, bool readOnly = false)

创建包含一批可变长度序列的新 Value 对象。 每个样本都由一个索引值表示,该值指向元素一热向量 dimension 中的非零值。 序列数是外部集合 batchOfSequences中的元素数。 每个序列的长度是集合列表中 batchOfSequences相应序列的元素数。 每个序列 batchOfSequences 都是一个新序列。

参数:

  • T:创建的 Value 对象的数据类型。 float double目前且受支持。
  • dimension:一热向量的尺寸。
  • batchOfSequences:表示样本序列的索引集合。 外部 IEnumerable 表示具有可变长度的序列集合,内部 IEnumerable 表示每个单独的序列。
  • device:应在哪个设备上创建 Value 对象。
  • readOnly:如果此标志为 true,则值为只读。

public static Value CreateBatchOfSequences<T>(int dimension, IEnumerable<IEnumerable<int>> batchOfSequences, IEnumerable<bool> sequenceStartFlags, DeviceDescriptor device, bool readOnly = false)

创建包含一批可变长度序列的新 Value 对象。 每个样本都由一个索引值表示,该值指向元素一热向量 dimension 中的非零值。 序列数是外部集合 batchOfSequences中的元素数。 每个序列的长度是内部集合 batchOfSequences中相应序列的元素数。

参数:

  • T:创建的 Value 对象的数据类型。 float目前受double支持。
  • dimension:一热向量的尺寸。
  • batchOfSequences:表示样本序列的索引集合。 外部 IEnumerable 表示具有可变长度的序列集合,内部 IEnumerable 表示每个单独的序列。
  • sequenceStartFlags:布尔值的集合。 每个元素表示在) 时是新序列 batchOfSequencestrue (,还是) 之前序列的 false 延续 (。
  • device:应在哪个设备上创建 Value 对象。
  • readOnly:如果此标志为 true,则值为只读。

以下方法使用稀疏输入创建 Value 对象。

目前支持压缩稀疏列格式 (CSC) 。 CSC 格式以列主格式存储矩阵,并且压缩包含列索引的数组。 CSC 格式的矩阵由以下参数表示:

  • nonZeroValues:以列主格式保存矩阵的所有非零值的数据数组。
  • rowIndices:包含数组中相应元素的行索引的数组 nonZeroValues
  • colStarts:将索引保存到数组和nonZeroValues数组中的数组rowIndices

在此处找到 CSC 格式的详细说明。


public static Value CreateSequence<T>(NDShape sampleShape, int sequenceLength, int[] colStarts, int[] rowIndices, T[] nonZeroValues, DeviceDescriptor device, bool readOnly = false)

使用 CSC 稀疏输入格式创建包含样本序列的新 Value 对象。 序列长度是稀疏矩阵的行数。 创建的序列是一个新序列。

参数:

  • T:创建的 Value 对象的数据类型。 float目前受double支持。
  • sampleShape:Value 的张量形状。 对于稀疏输入,张量形状前导维必须与张量形状的总大小相同。
  • sequenceLength:序列长度,也是稀疏矩阵中的行数。
  • colStarts:数组将每个列的索引保留到数组rowIndices中,nonZeroValues
  • rowIndices:包含数组中相应元素的行索引的数组 nonZeroValues
  • nonZeroValues:保存稀疏矩阵中所有非零值的数组。
  • device:应在哪个设备上创建 Value 对象。
  • readOnly:如果此标志为 true,则值为只读。

public static Value CreateSequence<T>(NDShape sampleShape, int sequenceLength, int[] colStarts, int[] rowIndices, T[] nonZeroValues, bool sequenceStartFlag, DeviceDescriptor device, bool readOnly = false)

使用 CSC 稀疏输入格式创建包含样本序列的新 Value 对象。 序列长度是稀疏矩阵的行数。 sequenceStartFlag 指定此序列是以前对此方法的调用中的上一个序列的新序列还是延续。

参数:

  • T:创建的 Value 对象的数据类型。 float目前受double支持。
  • sampleShape:Value 的张量形状。 对于稀疏输入,张量形状前导维必须与张量形状的总大小相同。
  • sequenceLength:序列长度,也是稀疏矩阵中的行数。
  • colStarts:数组将每个列的索引保留到数组rowIndices中,nonZeroValues
  • rowIndices:包含数组中相应元素的行索引的数组 nonZeroValues
  • nonZeroValues:保存稀疏矩阵中所有非零值的数组。
  • sequenceStartFlagtrue 指示它是一个新序列。 false 表示上一序列的延续。
  • device:应在哪个设备上创建 Value 对象。
  • readOnly:如果此标志为 true,则值为只读。

public static Value CreateSequence<T>(int dimension, int sequenceLength, int[] colStarts, int[] rowIndices, T[] nonZeroValues, DeviceDescriptor device, bool readOnly = false)

使用 CSC 稀疏输入格式创建包含样本序列的新 Value 对象。 序列长度是稀疏矩阵的行数。 创建的序列是一个新序列。

参数:

  • T:创建的 Value 对象的数据类型。 float目前受double支持。
  • dimension:稀疏矩阵中的列数。
  • sequenceLength:序列长度,也是稀疏矩阵中的行数。
  • colStarts:数组将每个列的索引保留到数组rowIndices中,nonZeroValues
  • rowIndices:包含数组中相应元素的行索引的数组 nonZeroValues
  • nonZeroValues:保存稀疏矩阵中所有非零值的数组。
  • device:应在哪个设备上创建 Value 对象。
  • readOnly:如果此标志为 true,则值为只读。

public static Value CreateSequence<T>(int dimension, int sequenceLength, int[] colStarts, int[] rowIndices, T[] nonZeroValues, bool sequenceStartFlag, DeviceDescriptor device, bool readOnly = false)

使用 CSC 稀疏输入格式创建包含样本序列的新 Value 对象。 序列长度是稀疏矩阵的行数。 sequenceStartFlag 指定此序列是新序列还是上一序列的延续。

参数:

  • T:创建的 Value 对象的数据类型。 float目前受double支持。
  • dimension:稀疏矩阵中的列数。
  • sequenceLength:序列长度,也是稀疏矩阵中的行数。
  • colStarts:数组将每个列的索引保留到数组rowIndices中,nonZeroValues
  • rowIndices:包含数组中相应元素的行索引的数组 nonZeroValues
  • nonZeroValues:保存稀疏矩阵中所有非零值的数组。
  • sequenceStartFlagtrue 指示它是一个新序列。 false 表示上一序列的延续。
  • device:应在哪个设备上创建 Value 对象。
  • readOnly:如果此标志为 true,则值为只读。

以下方法从 NDArrayView 创建 Value 对象。


public static Value Create(NDShape sampleShape, IEnumerable<NDArrayView> sequences, DeviceDescriptor device, bool readOnly = false)

基于 NDArrayViews 的集合创建新的 Value 对象。 每个序列 sequences 都是一个新序列。

参数:

  • sampleShape:正在创建的 Value 的张量形状。
  • sequences:NDArrayView 表示的序列集合。 每个 NDArrayView 表示一个序列。
  • device:应在哪个设备上创建 Value 对象。
  • readOnly:如果此标志为 true,则值为只读。

public static Value Create(NDShape sampleShape, IEnumerable<NDArrayView> sequences, IEnumerable<bool> sequenceStartFlags, DeviceDescriptor device, bool readOnly = false)

基于 NDArrayViews 的集合创建新的 Value 对象。 sequenceStartFlags 指定序列是新序列还是上一个序列的延续。

参数:

  • sampleShape:正在创建的 Value 的张量形状。
  • sequences:NDArrayView 表示的序列集合。 每个 NDArrayView 表示一个序列。
  • sequenceStartFlags:布尔值的集合。 每个元素表示在) 时是新序列 sequencestrue (,还是) 之前序列的 false 延续 (。
  • device:应在哪个设备上创建 Value 对象。
  • readOnly:如果此标志为 true,则值为只读。

Value 对象包含以下属性和方法。


public Value(NDArrayView data)

构造无掩码的多维值。


public Value(NDArrayView data, NDMask mask)

使用关联的掩码构造多维值。


public DataType DataType { get; }

Value 对象中包含的数据的 DataType


public DeviceDescriptor Device { get; }

Value 所在的设备的描述符。


public NDShape Shape { get; }

值的形状。


public StroageFormat StorageFormat { get; }

Value 的存储格式。


public bool IsSparse { get; }

一个布尔值,该值指示值是否包含稀疏存储格式的数据。


public bool IsReadOnly { get; }

一个布尔值,指示该值是否为只读值。


public int maskedCount { get; }

Value 中掩码/无效值的数目。


public void CopyFrom(Value Source)

将值的内容 source 复制到值。 数据和掩码的形状 Source必须与 Value 的数据和掩码相同 this

参数:

  • Source:从中复制 Value 的源对象。

public Value DeepClone()

使用与 Value 相同的设备上 this 新分配的存储创建一个新值,并将 Value 的内容复制到 this 新分配的值中。


public Value DeepClone(bool readOnly)

使用与 Value 相同的设备上 this 新分配的存储创建一个新值,并将 Value 的内容复制到 this 新分配的值中。

参数:

  • readOnly:如果此标志为只读,则新 Value 对象为 true只读对象。

public Value Alias(bool readOnly)

创建一个新值,该值是 Value 的 this 别名。 参数:

  • readOnly:如果此标志为只读,则新 Value 对象为 true只读对象。

public IList<IList<T>> GetDenseData<T>(Variable outputVariable)

获取 Value 对象中存储的数据,作为具有可变长度的序列列表(采用密集格式)。 此方法返回 IList IList<>。 外部列表的每个元素都表示一个序列。 每个序列由 IList 表示,包含一个可变数量的样本。 每个示例由类型为“T”的固定数量的元素组成。 元素数由 outputVariable 的形状决定。 样本数是 IList 中的元素计数除以样本的元素计数。

参数:

  • outputVariable:Value 表示的变量。 变量的形状应与 Value 的形状匹配。

public IList<IList<int>> GetOneHotData(Variable outputVariable)

获取以单热向量格式的可变长度序列列表的形式存储在 Value 对象中的数据。 此方法返回 IList IList<>。 外部列表的每个元素都表示一个序列。 每个序列由 IList 表示,包含一个可变数量的样本。 每个样本由一个热向量索引表示。 样本数是 IList 中的元素计数。

参数:

  • outputVariable:Value 表示的变量。 一热向量的大小应与变量中定义的大小匹配。

public void GetSparseData<T>(Variable outputVariable, out int sequenceLength, out IList<int> colStarts, out IList<int> rowIndices, out IList<T> nonZeroValues, out int numNonZeroValues)

将存储在 Value 对象中的数据复制到表示 CSC 稀疏格式序列的缓冲区。 如有必要,将调整序列缓冲区的大小。 Value 应具有与 outputVariable 相同的张量形状。 返回时,sequenceLength设置为存储在 Value 中的序列的长度,并且colStartsnonZeroValuesrowIndices包含列开始索引、行索引和非零值的数据,并numNonZeroValues设置为 Value 中包含的this非零值数。

参数:

  • outputVariable:在将数据从此值复制到缓冲区时,表示形状和动态轴。
  • sequenceLength:返回时,它设置为存储在 Value 中的序列的长度。
  • colStarts:返回时,它将索引 nonZeorValues 包含在矩阵的每个列的第一个非零元素中。
  • rowIndices:返回时,它包含矩阵的每个非零元素的行索引。
  • nonZeroValues:返回时,它包含矩阵的所有非零元素的值。
  • numNonZeroValues:返回时,返回矩阵的非零元素数。

将很快弃用以下方法。 请使用上述 GetDenseData () 和 GetOneHotData () 。


public void CopyVariableValueTo<T>(Variable outputVariable, List<List<T>> sequences)

Copies the data stored in the Value into the buffer provided by sequences. 它是 sequences 长度可变的序列列表。 外部列表中的 sequences 项数是 Value 中的序列数。 外部列表的每个元素都表示一个序列。 Each sequence, represented by List<T>, contains a variable number of samples. 每个示例由类型为的固定数量的元素 T组成。 样本的元素数由形状 outputVariable决定。 变量的形状应与 Value 的形状匹配。

参数:

  • outputVariable: denotes the shape and dynamic axes when copying data from the Value to the sequences.
  • sequences:用于存储从值复制的数据的输出缓冲区。

public void CopyVariableValueTo(Variable outputVariable, List<List<uint>> sequences

Copies the data stored in the Value object into the buffer provided by sequences. 它是 sequences 长度可变的序列列表。 外部列表中的 sequences 项数是 Value 中的序列数。 外部列表的每个元素都表示一个序列。 Each sequence, represented by List<uint>, contains a variable number of samples. 每个样本由指向一热向量中的非零值的索引表示。 一热向量的维度大小应与在中 outputVariable定义的维度大小匹配。

参数:

  • outputVariable: denotes the shape and dynamic axes when copying data from the Value to the sequences.
  • sequences:用于存储从值复制的数据的输出缓冲区。

类变量

表示与 a Function的输入和输出相对应的符号实体。

Variable评估中经常使用的属性包括:


public string Name { get; }

变量的名称。


public NDShape Shape { get; }

变量的形状。


public DataType DataTye { get; }

DataType (#enum-datatype) 变量表示的数据。


public VariableKind Kind { get; }

变量的 VariableKind


public bool IsSparse { get; }

一个布尔值,指示变量是否表示稀疏数据。


public bool IsInput { get; }

一个布尔值,指示变量是否为输入。


public bool IsOutput { get; }

一个布尔值,指示变量是否为输出。


public bool IsParameter { get; }

一个布尔值,指示变量是否为参数。


public bool IsConstant { get; }

一个布尔值,指示变量是否为常量。


public bool IsPlaceholder { get; }

一个布尔值,指示变量是否为占位符。


public IList<Axis> DynamicAxes { get; }

返回变量的动态轴。


public Function Owner { get; }

返回变量是输出的函数。 null当变量不是 VariableKind 输出时返回。

DeviceDescriptor 类

表示计算设备实例。

该类 DeviceDescriptor 包含以下属性和方法:


public int Id { get; }

设备的 ID。


public DeviceKind Type { get; }

设备的 DeviceKind


public static DeviceDescriptor CPUDevice { get; }

表示本地系统上 CPU 设备的 DeviceDescriptor。


public static DeviceDescriptor GPUDevice(int deviceId)

获取具有指定 CUDA 设备 ID 的本地系统上 GPU 设备的 DeviceDescriptor。

参数:

  • deviceId:CUDA 设备 ID。

public static IList<DeviceDescriptor> AllDevices()

获取所有可用/支持设备的描述符列表。

类 NDShape

表示多维矩形形状。


public NDShape()

使用 0 轴构造 NDShape,该轴表示标量。


public NDShape(int numAxes, int dimension)

构造具有指定排名和维度大小的 NDShape 实例。 每个轴具有相同的维数。

参数:

  • numAxes:形状的轴数。
  • dimension:应用于每个轴的维度大小。

public NDShape(int numAxes)

构造具有指定排名的 NDShape 实例。 每个轴的维数为 NDShape.InferredDimension.

参数:

  • numAxes:形状的轴数。

public static NDShape CreateNDShape(IEnumerable<int> dimensions)

创建具有指定维度的 NDShape 实例。 参数:

  • dimensions:每个轴的维度大小。

public int Rank { get; }

NDShape 的排名。


public IList<int> Dimensions { get; }

NDShape 的尺寸。


public int TotalSize { get; }

形状表示的矩形形状的总大小。


public int this[int key] { get; }

返回指定轴的维度大小。


public int IsUnknown { get; }

一个布尔值,指示形状是否为特殊未知形状。


public int HasInferredDimension { get; }

一个布尔值,该值指示形状的任何轴的维度大小是否未知/推断 (NDShape.InferredDimension) 。


public NDShape AppendShape(NDShape shape)

创建并返回一个新形状,该形状通过将指定“形状”的维度追加到 this 形状的尺寸。


public NDShape SubShape(int beginAxisId, int endAxisId)

创建并返回一个新的 NDShape 实例,该实例的维度与 this 形状的指定轴范围 [beginAxisId, endAxisId) 相同。


public NDShape SubShape(int beginAxisId)

创建并返回一个新的 NDShape 实例,其维度与 this 形状的轴范围在 beginAxisId 轴之间 (非独占) 和最后一个轴之间 (非独占) 。

类 NDArrayView

表示元素值的多维可写或只读数组。 此类型表示视图,并且可能有多个同时视图的数据基础为 NDArrayView 实例。 基础数据以稀疏或密集格式存储,并位于特定设备上。


public NDArrayView(NDShape viewShape, float[] dataBuffer, DeviceDescriptor device, bool readOnly = false)
public NDArrayView(NDShape viewShape, double[] dataBuffer, DeviceDescriptor device, bool readOnly = false)

将具有指定“dataBuffer”的 NDArrayView 构造为指定设备上的后盾存储。

参数:

  • viewShape:正在创建的 NDArrayView 的形状。
  • dataBuffer:NDArrayView 中包含的数据值。 “dataBuffer”必须至少与指定的“viewShape”的总大小一样大,并且必须超过创建的 NDArrayView 对象。
  • device:应在哪个设备上创建 NDArrayView 对象。
  • readOnly:如果此标志为只读,则 NDArrayView 对象为 true只读。

public NDArrayView(NDShape viewShape, int[] colStarts, int[] rowIndices, float[] nonZeroValues, DeviceDescriptor device, bool readOnly = false)
public NDArrayView(NDShape viewShape, int[] colStarts, int[] rowIndices, double[] nonZeroValues, DeviceDescriptor device, bool readOnly = false)

使用指定设备上的稀疏 CSC 格式构造具有指定存储的 NDArrayView。 指定的稀疏数据必须超过创建的 NDArrayView 对象。

参数:

  • viewShape:正在创建的 NDArrayView 的形状。
  • colStarts:数组将每列的索引保留到数组rowIndices中,nonZeroValues
  • rowIndices:包含数组中相应元素的行索引的数组 nonZeroValues
  • nonZeroValues:保存稀疏矩阵中所有非零值的数组。 指定的稀疏数据必须超过创建的 NDArrayView 对象。
  • device:应在哪个设备上创建 NDArrayView 对象。
  • readOnly:如果此标志为只读,则 NDArrayView 对象为 true只读。

public DeviceDescriptor Device

NDArrayView 所在的设备的 DeviceDescriptor。


public NDShape Shape

NDArrayView 的形状。


public DataType DataType

NDArrayView 存储的数据的数据类型。


public StroageFormat StorageFormat

NDArrayView 的存储格式。


public bool IsSparse

一个布尔值,指示 NDArrayView 是否包含稀疏存储格式的数据。


public bool IsReadOnly`

A boolean value indicating whether the NDArrayView is read-only.

***
```cs
public NDArrayView DeepClone()

在与视图相同的设备上 this 新建具有新分配存储的 NDArrayView,并将视图的内容复制到 this 新分配的视图中。


public NDArrayView DeepClone(bool readOnly)

在与视图相同的设备上 this 新建具有新分配存储的 NDArrayView,并将视图的内容复制到 this 新分配的视图中。

参数:

  • readOnly:如果此标志为只读,则新的 NDArrayView 对象为 true只读。

public NDArrayView DeepClone(DeviceDescriptor device, bool readOnly)

使用指定设备上新分配的存储创建新的 NDArrayView,并将视图的内容复制到 this 新分配的视图中。

参数:

  • device:应在哪个设备上创建新的 NDArrayView 对象。
  • readOnly:如果此标志为只读,则新的 NDArrayView 对象为 true只读。

public NDArrayView Alias(bool readOnly)

创建一个新的 NDArrayView,该视图是视图的 this 别名;即同一基础数据上相同形状 this 的新视图。

参数:

  • readOnly:如果此标志为只读,则新的 NDArrayView 对象为 true只读。

public NDArrayView AsShape(NDShape newShape)

创建一个新的 NDArrayView,它是视图的别名, this 但具有新形状。

参数:

  • newShape:新 NDArrayView 对象的形状。

public void CopyFrom(NDArrayView source)

复制“source”NDArrayView 的内容以查看 this 。 “源”视图和 this 视图的形状必须相同。

参数:

  • source:将内容复制到 this 视图的源 NDArrayView。

public void ChangeDevice(DeviceDescriptor device)

将 NDArrayView 的设备更改为指定设备。

参数:

  • device:NDArrayView 对象的目标设备。

类 NDMask

表示用于将 NDArrayView 对象的特定部分指定为掩码/无效的多维掩码。 此类型表示视图,并且可能有多个同时视图的数据基础为 NDMask 实例。


public NDMask(NDShape shape, DeviceDescriptor device)

在指定设备上构造指定形状的新 Mask 对象。

参数:

  • shape:NDMask 对象的形状。
  • device:MDMask 对象的目标设备。

public int MaskedCount { get; }

掩码/无效值的数目。


public int Device { get; }

掩码所在的设备的描述符


public int Shape { get; }

掩码的形状。


public void InvalidateSection(IEnumerable<int> sectionOffset, NDShape sectionShape)

将指定的子节掩码为无效。

参数:

  • sectionOffset:一个列表,指定应掩码为无效的节的起始位置。
  • sectionShape:形状描述应掩码为无效的部分。

public void MarkSequenceBegin(IEnumerable<int> offset)

将指定位置标记为序列开始。

参数:

  • sectionOffset:一个列表,指定应作为序列开始屏蔽的掩码中的起始位置。

public void MarkSequenceBegin(IEnumerable<int> offset, NDShape sectionShape)

将指定的子节标记为序列开头。

参数:

  • offset:一个列表,指定应作为序列开始屏蔽的节的起始位置。
  • sectionShape:形状描述应作为序列开始屏蔽的节。

public void Clear()

清除掩码。 所有当前掩码为无效的值都设置为有效。


public NDMask DeepClone(DeviceDescriptor device)

使用指定设备上新分配的存储创建新的 NDMask,并将掩码的内容复制到 this 新分配的视图中。

参数:

  • device:MDMask 对象的目标设备。

public NDMask DeepClone()

在与掩码相同的设备上 this 创建一个新的 NDMask,并将掩码的内容复制到 this 新分配的掩码中。


public NDMask Alias()

创建一个新的 NDMask,该 NDMask 是掩码的 this 别名。


public void CopyFrom(NDMask source)

将 NDMask 的内容 source 复制到 this 掩码。 掩码和this掩码的形状source必须相同。

参数:

  • source:将内容复制到 this 视图的源 NDMask。

类轴

表示的 Variable轴 。 除了对应于变量形状的每个轴的静态轴外,“输入”类型的变量和依赖于“Input”变量的任何“输出”变量还具有另外 2 个动态轴,其维度仅在计算 (viz 期间绑定到实际数据时才知道该变量。序列轴和批轴表示沿多个序列批处理的轴)

类中定义了以下属性 Axis


public string Name { get; }

轴的名称。


public bool IsStatic { get; }

返回一个布尔值,该值指示轴是否对应于静态轴。


public bool IsDynamic { get; }

返回一个布尔值,该值指示轴是否对应于动态轴。

类 Utils


public static void SetMaxNumCPUThreads(int numCPUThreads)

设置任何单个计算操作要使用的进程范围最大 CPU 线程数。


public static int GetMaxNumCPUThreads()

返回任何单个计算操作要使用的进程范围最大 CPU 线程数。


public static void SetTraceLevel(TraceLevel value)

指定全局日志记录详细级别。


public static TraceLevel GetTraceLevel()

返回当前日志记录详细级别。

enum VariableKind

表示符号 Variable 对象的类型

enum VariableKind { Input, Output, Parameter, Constant, Placeholder };

枚举数据类型

表示符号数据实体或实际数据的数据类型。

enum DataType { Unknown, Float, Double };

enum DeviceKind

表示计算设备的类型。

enum DeviceKind { CPU, GPU };

enum StorageFormat

表示 NDArrayView 实例的基础存储的格式。

enum StorageFormat { Dense, SparseCSC, SparseBlockCol };

enum ParameterCloningMethod

表示克隆函数时如何处理参数。

enum ParameterCloningMethod {
    Share, // Parameters are shared between the Function being cloned and the new clone.
    Clone, // New learnable Parameters are created and initialized with the current values of the corresponding Parameters of the Function being cloned.
    Freeze // Parameters are cloned and made immutable.
};

enum TraceLevel

表示日志记录详细级别。

enum TraceLevel { Error, Warning, Info };