Недавно я начал использовать метод 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
'''