比较与tf.keras.layers.BatchNormalization的功能差异
tf.keras.layers.BatchNormalization
tf.keras.layers.BatchNormalization(
axis=-1,
momentum=0.99,
epsilon=0.001,
center=True,
scale=True,
beta_initializer='zeros',
gamma_initializer='ones',
moving_mean_initializer='zeros',
moving_variance_initializer='ones',
beta_regularizer=None,
gamma_regularizer=None,
beta_constraint=None,
gamma_constraint=None,
**kwargs
)(inputs, training) -> Tensor
mindspore.nn.BatchNorm2d
class mindspore.nn.BatchNorm2d(
num_features,
eps=1e-5,
momentum=0.9,
affine=True,
gamma_init='ones',
beta_init='zeros',
moving_mean_init='zeros',
moving_var_init='ones',
use_batch_statistics=None,
data_format='NCHW'
)(x) -> Tensor
更多内容详见mindspore.nn.BatchNorm2d。
差异对比
TensorFlow:对输入的数据进行批归一化。
MindSpore:对输入的四维数据进行批归一化(Batch Normalization Layer)。在四维输入(具有额外通道维度的小批量二维输入)上应用批归一化处理,以避免内部协变量偏移。
分类 |
子类 |
TensorFlow |
MindSpore |
差异 |
---|---|---|---|---|
参数 |
参数1 |
axis |
- |
应规范化的轴(通常是特征轴),MindSpore无此参数 |
参数2 |
momentum |
momentum |
- |
|
参数3 |
epsilon |
eps |
功能一致,参数名不同 |
|
参数4 |
center |
- |
如果为True,则将偏移量beta添加到归一化张量,如果为False,则忽略beta。MindSpore无此参数 |
|
参数5 |
scale |
- |
如果为True,则乘以gamma,如果为False,则不使用gamma。MindSpore无此参数 |
|
参数6 |
beta_initializer |
beta_init |
功能一致,参数名不同 |
|
参数7 |
gamma_initializer |
gamma_init |
功能一致,参数名不同 |
|
参数8 |
moving_mean_initializer |
moving_mean_init |
功能一致,参数名不同 |
|
参数9 |
moving_variance_initializer |
moving_var_init |
功能一致,参数名不同 |
|
参数10 |
beta_regularizer |
- |
beta权重的可选正则器。MindSpore无此参数 |
|
参数11 |
gamma_regularizer |
- |
gamma权重的可选正则器。MindSpore无此参数 |
|
参数12 |
beta_constraint |
- |
beta权重的可选约束。MindSpore无此参数 |
|
参数13 |
gamma_constraint |
- |
gamma权重的可选约束。MindSpore无此参数 |
|
参数14 |
**kwargs |
- |
不涉及 |
|
参数15 |
- |
num_features |
通道数量,输入Tensor shape (N,C,H,W)中的C,TensorFlow无此参数 |
|
参数16 |
- |
affine |
bool类型,设置为True时,可学习 γ 和 β 值,默认值:True。TensorFlow无此参数 |
|
参数17 |
- |
use_batch_statistics |
如果为True,则使用当前批处理数据的平均值和方差值,并跟踪运行平均值和运行方差。 |
|
参数18 |
- |
data_format |
MindSpore可指定输入数据格式可为”NHWC”或”NCHW”,默认值:”NCHW”。TensorFlow无此参数 |
|
输入 |
输入1 |
inputs |
x |
功能一致,参数名不同 |
输入2 |
training |
- |
不涉及 |
代码示例
两API功能相同,使用方法相同。
# TensorFlow
import tensorflow as tf
inputx = [[[[1, 2],
[2, 1]],
[[3, 4],
[4, 3]]],
[[[5, 6],
[6, 5]],
[[7, 8],
[8, 7]]]]
input_tf = tf.constant(inputx, dtype=tf.float32)
output_tf = tf.keras.layers.BatchNormalization(axis=3, momentum=0.1, epsilon=1e-5)
output = output_tf(input_tf, training=False)
print(output.numpy())
# [[[[0.999995 1.99999 ]
# [1.99999 0.999995 ]]
#
# [[2.999985 3.99998 ]
# [3.99998 2.999985 ]]]
#
#
# [[[4.999975 5.99997 ]
# [5.99997 4.999975 ]]
#
# [[6.9999647 7.99996 ]
# [7.99996 6.9999647]]]]
# MindSpore
from mindspore import Tensor, nn
import numpy as np
m = nn.BatchNorm2d(num_features=2, momentum=0.9)
input_ms = Tensor(np.array([[[[1, 2], [2, 1]],
[[3, 4], [4, 3]]],
[[[5, 6], [6, 5]],
[[7, 8], [8, 7]]]]).astype(np.float32))
output = m(input_ms)
print(output)
# [[[[0.99999493 1.9999899 ]
# [1.9999899 0.99999493]]
#
# [[2.9999847 3.9999797 ]
# [3.9999797 2.9999847 ]]]
#
#
# [[[4.9999747 5.9999695 ]
# [5.9999695 4.9999747 ]]
#
# [[6.9999647 7.9999595 ]
# [7.9999595 6.9999647 ]]]]