【问题标题】:How to initialize mean and variance of Pytorch BatchNorm2d?如何初始化 Pytorch BatchNorm2d 的均值和方差?
【发布时间】:2019-10-11 05:48:21
【问题描述】:

我正在将 TensorFlow 模型转换为 Pytorch。我想使用 TensorFlow 模型初始化 BatchNorm2d 的均值和方差。 我是这样做的:

bn.running_mean = torch.nn.Parameter(torch.Tensor(TF_param))

我得到这个错误:

RuntimeError: the derivative for 'running_mean' is not implemented

但适用于bn.weightbn.bias。有什么方法可以使用我预训练的 Tensorflow 模型来初始化均值和方差? Pytorch 中有 moving_mean_initializermoving_variance_initializer 这样的东西吗?

谢谢!

【问题讨论】:

    标签: tensorflow pytorch


    【解决方案1】:

    batch norm层的运行均值和方差不是nn.Parameters,而是该层的buffer

    我认为您可以简单地分配一个torch.tensor,无需将nn.Parameter 包裹起来。

    【讨论】:

    • 哇!有效!谢谢!顺便说一句,如果我冻结 bn 参数(停止更新 bn),running_meanrunning_var 将不会改变。 running_mean 和 running_var 将直接保存在模型中。我对吗?抱歉英语表达不好。
    • @han.liu 批量标准运行统计信息在正向传递时更新,而不是由优化器更新。为了在训练期间冻结运行统计数据,将每个批范数层的动量设置为零。或者,如果模型处于评估模式,则不会更新运行统计信息。
    猜你喜欢
    • 2021-10-26
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 2018-07-09
    • 2020-05-21
    • 2021-01-29
    相关资源
    最近更新 更多