TensorFlow2.0-Examples
TensorFlow2.0-Examples copied to clipboard
BatchNormalization层疑问请教?
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这个变量。 请大神赐教!
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模式的
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)
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,我是这样觉得的。所以这一点我也比较疑惑作者为什么这样设置。