比较与tf.keras.layers.LayerNormalization的功能差异

tf.keras.layers.LayerNormalization

class tf.keras.layers.LayerNormalization(
    axis=-1,
    epsilon=0.001,
    center=True,
    scale=True,
    beta_initializer='zeros',
    gamma_initializer='ones',
    beta_regularizer=None,
    gamma_regularizer=None,
    beta_constraint=None,
    gamma_constraint=None,
    **kwargs
)(x) -> Tensor

更多内容详见tf.keras.layers.LayerNormalization

mindspore.nn.LayerNorm

class mindspore.nn.LayerNorm(
    normalized_shape,
    begin_norm_axis=-1,
    begin_params_axis=-1,
    gamma_init='ones',
    beta_init='zeros',
    epsilon=1e-7
)(x) -> Tensor

更多内容详见mindspore.nn.LayerNorm

差异对比

TensorFlow:在mini-batch输入上应用层归一化(Layer Normalization),其中,参数centerscale控制是否使用beta和gamma,beta_regularizergamma_regularizer用于控制是否采用beta和gamma的可选正则化器,参数beta_constraintgamma_constraint用于控制是否采用beta和gamma的可选约束。

MindSpore:TensorFlow的此API中各参数均为默认时,MindSpore此API实现功能与TensorFlow基本一致。但MindSpore中不存在参数centerscale,不能实现忽略beta和gamma的功能;不存在参数beta_regularizergamma_regularizerbeta_constraint,和gamma_constraint,暂不支持实现对应功能;同时MindSpore此API增加了参数begin_params_axis控制第一个参数(beta, gamma)的维度,以及参数normalized_shape用来控制平均值和标准差计算的特定维度。

分类

子类

TensorFlow

MindSpore

差异

参数

参数1

axis

begin_norm_axis

功能一致,参数名不同

参数2

epsilon

epsilon

功能一致,参数名相同,默认值不同

参数3

center

-

TensorFlow中此参数用于控制是否使用beta偏移量,MindSpore无此参数

参数4

scale

-

TensorFlow中此参数用于控制是否使用gamma,MindSpore无此参数

参数5

beta_initializer

beta_init

功能一致,参数名不同

参数6

gamma_initializer

gamma_init

功能一致,参数名不同

参数7

beta_regularizer

-

TensorFlow中此参数用于控制是否采用beta权重的可选正则化器,MindSpore无此参数

参数8

gamma_regularizer

-

TensorFlow中此参数用于控制是否采用gamma权重的可选正则化器,MindSpore无此参数

参数9

beta_constraint

-

TensorFlow中此参数用于控制是否采用beta权重的可选约束,MindSpore无此参数

参数10

gamma_constraint

-

TensorFlow中此参数用于控制是否采用gamma权重的可选约束,MindSpore无此参数

参数11

**kwargs

-

不涉及

参数12

-

normalized_shape

TensorFlow中无此参数,MindSpore中的此参数控制平均值和标准差计算的特定维度

参数13

-

begin_params_axis

TensorFlow中无此参数,MindSpore中的此参数确定第一个参数(beta, gamma)的维度,用于内置参数scale和centering的广播

输入

单输入

x

x

-

代码示例

TensorFlow的此API中各参数均为默认时,两API功能一致,用法相同。

# TensorFlow
import tensorflow as tf

inputs = tf.ones([20, 5, 10, 10])
layer = tf.keras.layers.LayerNormalization(axis=-1)
output = layer(inputs)
print(output.shape)
# (20, 5, 10, 10)

# MindSpore
import mindspore
from mindspore import Tensor
import mindspore.numpy as np
import mindspore.nn as nn

x = Tensor(np.ones([20, 5, 10, 10]), mindspore.float32)
shape1 = x.shape[1:]
m = nn.LayerNorm(shape1, begin_norm_axis=1, begin_params_axis=1)
output = m(x).shape
print(output)
# (20, 5, 10, 10)