共计 1477 个字符,预计需要花费 4 分钟才能阅读完成。
日常我用 BN 的机会不是太多,这个可能在图像领域会使用的比较多。使用 BN 会加速你模型训练的速度,这个跟 BP 反向传播梯度更新有很大的关系,这个应该都知道的。
今天说的这个跟TF 的使用上有一定的关系。BN 的操作是针对一批样本进行处理的,在训练的时候会根据训练数据不断的更新自己的参数。具体的API 如下所示:
主要需要注意的是
这四个参数是在模型训练过程中可训练的。现在日常使用的版本都是1.14版本的TF ,主要使用Estimator 如果不特殊指定 moving_mean和 moving_variance
并不会被保存到 checkpoint 里,导致里在inference的时候出现 很大的偏差,针对这类的问题需要在 Estimator model_fn做出一定的改动。
这个在官方文档里也有记录
Note: when training, the moving_mean and moving_variance need to be updated. By default the update ops are placed in tf.GraphKeys.UPDATE_OPS, so they need to be added as a dependency to the train_optf.GraphKeys.UPDATE_OPS, so they need to be added as a dependency to the train_op
题外话
在线上 Serving的时候都是对一个用户全部预估候选Item ,这个跟实际线下存在一定的差异,所以感觉不是很适合。对比图像领域不太一样,图像信息固定,学习有一定的规律。
