Как использовать распад EMA в TensorFlow? - PullRequest
0 голосов
/ 16 марта 2019

Недавно я начал использовать метод EMA в TensorFlow (показано ниже)

Я создал класс Network для построения архитектуры нейронной сети, а затем определил две модели, используя функции-члены класса. Теперь я хочу, чтобы модель2 использовала параметры EMA модели1. Я имею в виду Как использовать экспоненциальную скользящую среднюю в Tensorflow

Но параметры модели2 не изменились с моделью1.

Какая часть не так и как изменить? Большое спасибо 100

    with tf.variable_scope('model') as scope:
        '''
        Build is a member function of the class
        '''
        model= Network(self.config)
        model.build(net_input=data_x, net_label=data_y, net_tag=data_tag)
        self.net = model.net
        self.trainable_list = model.trainable_list
        self.variables = model.variables

    ema = tf.train.ExponentialMovingAverage(0.9)
    var_class = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, scope.name)
    update_op = ema.apply(var_class)
    tf.add_to_collection(tf.GraphKeys.UPDATE_OPS, update_op)

    def use_ema_variables(getter, name, *_, **__):
        var = getter(name, *_, **__)
        ema_var = ema.average(var)
        return ema_var if ema_var else var

    with tf.variable_scope('ema_model',custom_getter=use_ema_variables) as scope:
        # ema_model
        ema_model= Network(self.config)
        ema_model.build(net_input=data_x, net_label=data_y, net_tag=data_tag)
        '''
        ema_model don't get ema parameters
        '''
...