小编Add*_*ddy的帖子

为什么c ++库经常定义自己的原始类型?

我最近开始使用OpenCL库,我注意到他们正在使用自己的整数类型,比如cl_int和cl_uint,而不是int和unsigned int.

这是为什么?为什么他们不使用语言中默认的类型?这是一个好的做法还是有实际的原因(即更易读的代码)?

c++ types naming-conventions

6
推荐指数
1
解决办法
814
查看次数

tf.keras.layers.BatchNormalization 与 trainable=False 似乎没有更新其内部移动均值和方差

我试图找出 BatchNormalization 层在 TensorFlow 中的具体表现。我想出了以下一段代码,据我所知,它应该是一个完全有效的 keras 模型,但是 BatchNormalization 的均值和方差似乎没有更新。

来自文档https://www.tensorflow.org/api_docs/python/tf/keras/layers/BatchNormalization

对于 BatchNormalization 层,在该层上设置 trainable = False 意味着该层随后将在推理模式下运行(这意味着它将使用移动均值和移动方差来规范化当前批次,而不是使用均值和当前批次的方差)。

我希望模型在每次后续预测调用时返回不同的值。然而,我看到的是返回 10 次的完全相同的值。谁能向我解释为什么 BatchNormalization 层不更新其内部值?

import tensorflow as tf
import numpy as np

if __name__ == '__main__':

    np.random.seed(1)
    x = np.random.randn(3, 5) * 5 + 0.3

    bn = tf.keras.layers.BatchNormalization(trainable=False, epsilon=1e-9)
    z = input = tf.keras.layers.Input([5])
    z = bn(z)

    model = tf.keras.Model(inputs=input, outputs=z)

    for i in range(10):
        print(x)
        print(model.predict(x))
        print()
Run Code Online (Sandbox Code Playgroud)

我使用TensorFlow 2.1.0

python tensorflow batch-normalization tensorflow2.0

5
推荐指数
1
解决办法
7506
查看次数