nuget server logo nuget api documents
↑

API Docs / Microsoft.VisualBasic.MachineLearning.TensorFlow / ITensorCompute

ITensorCompute

Full name Microsoft.VisualBasic.MachineLearning.TensorFlow.Compute.ITensorCompute Assembly Microsoft.VisualBasic.MachineLearning.TensorFlow Members 54

张量计算后端契约。

00 Remarks

形状校验、广播等“语义边界”仍然由 Tensor 层负责, 后端只需要实现纯粹的数值计算。后端应当是无状态(或线程安全)的, 因为 Tensor.computeKernel 是一个全局共享变量。

01 Syntax

Microsoft.VisualBasic.MachineLearning.TensorFlow.Compute.ITensorCompute

02 Methods

NameOverloadsSummary
Heaviside 1 阶跃函数(Heaviside): 大于 0 的元素取 1, 否则取 0。
Conv2D 1 二维卷积(严格来说是互相关,与主流深度学习框架一致)。
Conv2DBackwardInput 1 卷积反向:计算对输入的梯度。
Conv2DBackwardFilter 1 卷积反向:计算对卷积核的梯度。
Conv2DBackwardBias 1 卷积反向:计算对偏置的梯度(沿 N / OH / OW 三个维度求和)。
MaxPool2D 1 二维最大池化前向,同时输出每个输出位置所对应的输入扁平下标(供反向 scatter)。
MaxPool2DBackward 1 二维最大池化反向:按前向记录的 argMax 把梯度回填到输入位置。
Sum 1 沿指定轴(Nothing 表示整体)求和
SumAll 1 整体求和
Mean 1 沿指定轴(Nothing 表示整体)求均值
MeanAll 1 整体求均值
StdDev 1 总体标准差
L2Norm 1 L2 范数(欧几里得范数)
Add 1
Subtract 1
Multiply 1
Divide 1
Maximum 1
Minimum 1
Exp 1
Log 1
Sqrt 1
Square 1
Abs 1
Sin 1
Cos 1
Tanh 1
Sigmoid 1
Negate 1
Reciprocal 1
Relu 1
LeakyRelu 1
Elu 1
Gelu 1
Swish 1
AddScalar 1
MultiplyScalar 1
DivideScalar 1
Pow 1
Clip 1
MatMul 1
Transpose 1
Max 1
Min 1
Prod 1
ArgMax 1
ArgMin 1
Softmax 1
LogSoftmax 1
SigmoidCrossEntropyWithLogits 1
MseLoss 1
L2Loss 1
HuberLoss 1

03 Properties

NameOverloadsSummary
Name 1 后端名称,用于诊断输出(例如 "SIMD" / "CUDA")。

04 Members

method Heaviside #
Heaviside(Tensor)

阶跃函数(Heaviside): 大于 0 的元素取 1, 否则取 0。

Remarks

后端本身没有比较/掩码算子, 而 ReLU 系激活函数的反向传播需要的正是 (x > 0) ? dy : 0 这样的逐元素掩码; 有了本算子之后就可以写成 Heaviside(x) 与上游梯度逐元素相乘, 从而让整个反向过程同样可以下放到 GPU。 (命名为 Heaviside 而不是 Step, 是因为 Step 是 VB 的保留字)

method Conv2D #
Conv2D(Tensor, Tensor, Tensor, Int32, Int32)

二维卷积(严格来说是互相关,与主流深度学习框架一致)。

Parameters
NameTypeDescription
xTensor

输入,形状 (N, H, W, C)

filtersTensor

卷积核,形状 (KH, KW, C, OutC)

biasTensor

偏置,形状 (OutC);传 Nothing 表示不加偏置

strideInt32

步长

paddingInt32

四周零填充宽度

Returns

输出,形状 (N, OH, OW, OutC)

method Conv2DBackwardInput #
Conv2DBackwardInput(Tensor, Tensor, Int32(), Int32, Int32)

卷积反向:计算对输入的梯度。

Parameters
NameTypeDescription
gradOutputTensor

上游梯度,形状 (N, OH, OW, OutC)

filtersTensor

前向使用过的卷积核,形状 (KH, KW, C, OutC)

inputShapeInt32()

前向输入的形状 (N, H, W, C),用于确定输出形状

Returns

对输入的梯度,形状 (N, H, W, C)

method Conv2DBackwardFilter #
Conv2DBackwardFilter(Tensor, Tensor, Int32(), Int32, Int32)

卷积反向:计算对卷积核的梯度。

Parameters
NameTypeDescription
gradOutputTensor

上游梯度,形状 (N, OH, OW, OutC)

xTensor

前向使用过的输入,形状 (N, H, W, C)

filterShapeInt32()

卷积核形状 (KH, KW, C, OutC),用于确定输出形状

Returns

对卷积核的梯度,形状 (KH, KW, C, OutC)

method Conv2DBackwardBias #
Conv2DBackwardBias(Tensor)

卷积反向:计算对偏置的梯度(沿 N / OH / OW 三个维度求和)。

Parameters
NameTypeDescription
gradOutputTensor

上游梯度,形状 (N, OH, OW, OutC)

Returns

对偏置的梯度,形状 (OutC)

method MaxPool2D #
MaxPool2D(Tensor, Int32, Int32, Int32, Tensor)

二维最大池化前向,同时输出每个输出位置所对应的输入扁平下标(供反向 scatter)。

Parameters
NameTypeDescription
xTensor

输入,形状 (N, H, W, C)

sizeInt32

池化窗口边长

strideInt32

步长

paddingInt32

四周零填充宽度

argMaxTensor

输出参数:形状 (N, OH, OW, C),元素为获胜元素在输入张量之中的扁平下标 (即 n*H*W*C + h*W*C + w*C + c)。反向传播依赖它做梯度回填, 因为每个输出位置唯一的对应一个输入位置,所以反向不需要原子操作。

Returns

输出,形状 (N, OH, OW, C)

method MaxPool2DBackward #
MaxPool2DBackward(Tensor, Tensor, Int32())

二维最大池化反向:按前向记录的 argMax 把梯度回填到输入位置。

Parameters
NameTypeDescription
gradOutputTensor

上游梯度,形状 (N, OH, OW, C)

argMaxTensor

前向返回的输入扁平下标,形状 (N, OH, OW, C)

inputShapeInt32()

前向输入的形状 (N, H, W, C)

Returns

对输入的梯度,形状 (N, H, W, C)

method Sum #
Sum(Tensor, Nullable(Of Int32), Boolean)

沿指定轴(Nothing 表示整体)求和

method SumAll #
SumAll(Tensor)

整体求和

method Mean #
Mean(Tensor, Nullable(Of Int32), Boolean)

沿指定轴(Nothing 表示整体)求均值

method MeanAll #
MeanAll(Tensor)

整体求均值

method StdDev #
StdDev(Tensor)

总体标准差

method L2Norm #
L2Norm(Tensor)

L2 范数(欧几里得范数)

property Name #
Name

后端名称,用于诊断输出(例如 "SIMD" / "CUDA")。

method Add #
method Subtract #
Subtract(Tensor, Tensor)
method Multiply #
Multiply(Tensor, Tensor)
method Divide #
Divide(Tensor, Tensor)
method Maximum #
Maximum(Tensor, Tensor)
method Minimum #
Minimum(Tensor, Tensor)
method Exp #
Exp(Tensor)
method Log #
Log(Tensor)
method Sqrt #
Sqrt(Tensor)
method Square #
Square(Tensor)
method Abs #
Abs(Tensor)
method Sin #
Sin(Tensor)
method Cos #
Cos(Tensor)
method Tanh #
Tanh(Tensor)
method Sigmoid #
Sigmoid(Tensor)
method Negate #
Negate(Tensor)
method Reciprocal #
Reciprocal(Tensor)
method Relu #
Relu(Tensor)
method LeakyRelu #
LeakyRelu(Tensor, Double)
method Elu #
Elu(Tensor, Double)
method Gelu #
Gelu(Tensor)
method Swish #
Swish(Tensor)
method AddScalar #
AddScalar(Tensor, Double)
method MultiplyScalar #
MultiplyScalar(Tensor, Double)
method DivideScalar #
DivideScalar(Tensor, Double)
method Pow #
Pow(Tensor, Double)
method Clip #
Clip(Tensor, Double, Double)
method MatMul #
MatMul(Tensor, Tensor)
method Transpose #
Transpose(Tensor)
method Max #
Max(Tensor, Nullable(Of Int32), Boolean)
method Min #
Min(Tensor, Nullable(Of Int32), Boolean)
method Prod #
Prod(Tensor, Nullable(Of Int32))
method ArgMax #
ArgMax(Tensor, Nullable(Of Int32))
method ArgMin #
ArgMin(Tensor, Nullable(Of Int32))
method Softmax #
Softmax(Tensor, Int32)
method LogSoftmax #
LogSoftmax(Tensor, Int32)
method SigmoidCrossEntropyWithLogits #
SigmoidCrossEntropyWithLogits(Tensor, Tensor)
method MseLoss #
MseLoss(Tensor, Tensor)
method L2Loss #
L2Loss(Tensor)
method HuberLoss #
HuberLoss(Tensor, Tensor, Double)