TensorFlow 风格的神经网络模块 提供激活函数、损失函数和正则化操作,全部基于 Tensor 实现
nn
01 Syntax
02 Methods
| Name | Overloads | Summary |
|---|---|---|
| relu | 1 | ReLU 激活函数: max(0, x) |
| leaky_relu | 1 | Leaky ReLU: max(alpha * x, x) 负值部分使用 alpha 斜率,默认 0.01 |
| elu | 1 | ELU 激活函数: x if x > 0 else alpha * (exp(x) - 1) |
| sigmoid | 1 | Sigmoid 激活函数: 1 / (1 + e^(-x)) |
| tanh | 1 | Tanh 激活函数: (e^x - e^(-x)) / (e^x + e^(-x)) |
| gelu | 1 | GELU 激活函数(高斯误差线性单元): x * Phi(x) 使用近似公式: 0.5 * x * (1 + tanh(sqrt(2/pi) * (x + 0.044715 * x^3))) |
| swish | 1 | Swish / SiLU 激活函数: x * sigmoid(x) |
| softmax | 1 | Softmax 函数: exp(x_i) / sum(exp(x_j)) 使用 max-shift 技巧保证数值稳定性 |
| log_softmax | 1 | Log Softmax: log(softmax(x)) 使用数值稳定的 log-sum-exp 技巧 |
| sigmoid_cross_entropy_with_logits | 1 | Sigmoid 交叉熵损失(数值稳定版本) 对每个元素独立计算: max(x,0) - x*z + log(1 + exp(-|x|)) |
| softmax_cross_entropy_with_logits | 1 | Softmax 交叉熵损失 loss = -sum(labels * log(softmax(logits))) |
| sparse_softmax_cross_entropy_with_logits | 1 | 稀疏 Softmax 交叉熵损失 labels 是整数索引(非 one-hot),每个元素表示正确的类别索引 |
| mse_loss | 1 | 均方误差损失: mean((predictions - targets)^2) |
| l2_loss | 1 | L2 损失: sum(x^2) / 2 |
| huber_loss | 1 | Huber 损失(Smooth L1 Loss) 当 |x| 不超过 delta 时为平方损失,否则为线性损失 |
| dropout | 1 | Dropout 正则化 以概率 keepProb 保留每个神经元,其余置零 训练时将保留的神经元值放大 1/keepProb 以保持期望不变 |
03 Members
ReLU 激活函数: max(0, x)
Double)Leaky ReLU: max(alpha * x, x) 负值部分使用 alpha 斜率,默认 0.01
Double)ELU 激活函数: x if x > 0 else alpha * (exp(x) - 1)
Sigmoid 激活函数: 1 / (1 + e^(-x))
Tanh 激活函数: (e^x - e^(-x)) / (e^x + e^(-x))
GELU 激活函数(高斯误差线性单元): x Phi(x) 使用近似公式: 0.5 x (1 + tanh(sqrt(2/pi) (x + 0.044715 * x^3)))
Swish / SiLU 激活函数: x * sigmoid(x)
Int32)Softmax 函数: exp(x_i) / sum(exp(x_j)) 使用 max-shift 技巧保证数值稳定性
| Name | Type | Description |
|---|---|---|
logits | Tensor | 输入张量 |
axis | Int32 | 沿指定轴计算 softmax,默认为最后一维 (-1) |
Int32)Log Softmax: log(softmax(x)) 使用数值稳定的 log-sum-exp 技巧
Sigmoid 交叉熵损失(数值稳定版本) 对每个元素独立计算: max(x,0) - x*z + log(1 + exp(-|x|))
逐元素损失,形状与输入相同
Softmax 交叉熵损失 loss = -sum(labels * log(softmax(logits)))
| Name | Type | Description |
|---|---|---|
labels | Tensor | 真实标签(one-hot 或 概率分布),形状与 logits 相同 |
logits | Tensor | 模型输出 logits |
axis | Int32 | 类别所在的轴,默认为最后一维 |
每个样本的损失,形状为去除 axis 维度的张量
稀疏 Softmax 交叉熵损失 labels 是整数索引(非 one-hot),每个元素表示正确的类别索引
每个样本的损失
均方误差损失: mean((predictions - targets)^2)
L2 损失: sum(x^2) / 2
Huber 损失(Smooth L1 Loss) 当 |x| 不超过 delta 时为平方损失,否则为线性损失
Dropout 正则化 以概率 keepProb 保留每个神经元,其余置零 训练时将保留的神经元值放大 1/keepProb 以保持期望不变
| Name | Type | Description |
|---|---|---|
t | Tensor | 输入张量 |
keepProb | Double | 保留概率 (0~1) |
seed | Nullable(Of Int32) | 随机种子(可选) |