TensorFlow2.0-Examples icon indicating copy to clipboard operation
TensorFlow2.0-Examples copied to clipboard

BatchNormalization层疑问请教?

Open xumaoxin opened this issue 5 years ago • 3 comments

def call(self, x, training=False):
    if not training:
        training = tf.constant(False)
    training = tf.logical_and(training, self.trainable)
    return super().call(x, training)

代码training = tf.logical_and(training, self.trainable)是如何发挥训练时选择training模式,推理时选择非traning模式的作用的? 看不太懂self.trainabel这个变量。 请大神赐教!

xumaoxin avatar Dec 07 '19 14:12 xumaoxin

def call(self, x, training=False):
    if not training:
        training = tf.constant(False)
    training = tf.logical_and(training, self.trainable)
    return super().call(x, training)

代码training = tf.logical_and(training, self.trainable)是如何发挥训练时选择training模式,推理时选择非traning模式的作用的? 看不太懂self.trainabel这个变量。 请大神赐教!

请问你这个问题找到理解方法了吗 我遇到类似的一个问题,在使用GradientType自定义训练过程时,BatchNorm层和Dropout层是如何选择traning或者非training模式的

Student-HXJ avatar Apr 24 '20 12:04 Student-HXJ

def call(self, x, training=False):
    if not training:
        training = tf.constant(False)
    training = tf.logical_and(training, self.trainable)
    return super().call(x, training)

代码training = tf.logical_and(training, self.trainable)是如何发挥训练时选择training模式,推理时选择非traning模式的作用的? 看不太懂self.trainabel这个变量。 请大神赐教!

我仔细看了一下,定义 bn 子类的时候,默认就是 training = False,即为推理模式; 在 train.py 文件中,调用 model 的时候,trainning = True 设置为了训练模式,代码片段如下: with tf.GradientTape() as tape: pred_result = model(image_data, training=True)

forever208 avatar Jun 07 '20 08:06 forever208

def call(self, x, training=False):
    if not training:
        training = tf.constant(False)
    training = tf.logical_and(training, self.trainable)
    return super().call(x, training)

代码training = tf.logical_and(training, self.trainable)是如何发挥训练时选择training模式,推理时选择非traning模式的作用的? 看不太懂self.trainabel这个变量。 请大神赐教!

我仔细看了一下,定义 bn 子类的时候,默认就是 training = False,即为推理模式; 在 train.py 文件中,调用 model 的时候,trainning = True 设置为了训练模式,代码片段如下: with tf.GradientTape() as tape: pred_result = model(image_data, training=True)

你好,看了你的回答,觉得有些不太赞同。当调用model时,在train的时候,确实设置了training=True, 但是这个training只是传给了Create_Yolov3()这个函数,而在这个函数里,training并没有传给YOLOv3(),所以在YOLOv3这个模型内部调用BatchNormalization时,其training的参数还是False,我是这样觉得的。所以这一点我也比较疑惑作者为什么这样设置。

dujifeng avatar Jul 12 '20 15:07 dujifeng