1 实现原理
Layer Normalization 也是一种归一化技术。与 BatchNormalization不同的是,LayerNormalization 是在指定的特征维度上进行归一化的,而BatchNormalization是在数据批次维度上进行归一化的。
2 从tensorflow到pytorch
tensorflow中还是用keras的layernorm模型,具体的名字是keras.layers.LayerNormalization
需要指定epsilon和axis,否则会采用默认值。
我的例子取epsilon=1e-5,axis取[-2,-1],对最后两维做归一化。
这里采用get_weights从LayerNormalization中得到参数,然后转换为torch的LayerNorm的参数。注意有一个reshape。
模型的输入维度定义:[1,2,3,4],最后两维是[3,4],将会对这两个维度归一化。
from torch.nn import BatchNorm2d
import torch
import tensorflow as tf
import numpy as np
from tensorflow import keras
#例子是对最后两维做layernorm
#1)tensorflow 转为 pytorch
B,C,H,W=1,2,3,4
LN_EPS=1e-5
inputs = np.random.rand(B,C,H,W).astype("float32")
#tensorflow LayerNormalization 模型
#先用模型处理一次,这样才能得到模型的参数
inputs_tf = tf.convert_to_tensor(inputs)
layer_tf &#