Tensorflow Keras copia pesos de un modelo a otro

Usando Keras de Tensorflow 1.4.1, ¿cómo se copian pesos de un modelo a otro?

Como antecedentes, estoy tratando de implementar una red deep-q (DQN) para juegos de Atari después de la publicación DQN de DeepMind. Tengo entendido que la implementación utiliza dos redes, Q y Q '. Los pesos de Q se entrenan usando el descenso en gradiente, y luego los pesos se copian periódicamente a Q '.

Así es como construyo Q y Q ':

ACT_SIZE   = 4
LEARN_RATE = 0.0025
OBS_SIZE   = 128

def buildModel():
  model = tf.keras.models.Sequential()

  model.add(tf.keras.layers.Lambda(lambda x: x / 255.0, input_shape=OBS_SIZE))
  model.add(tf.keras.layers.Dense(128, activation="relu"))
  model.add(tf.keras.layers.Dense(128, activation="relu"))
  model.add(tf.keras.layers.Dense(ACT_SIZE, activation="linear"))
  opt = tf.keras.optimizers.RMSprop(lr=LEARN_RATE)

  model.compile(loss="mean_squared_error", optimizer=opt)

  return model

Llamo a eso dos veces para obtener Q y Q '.

Yo tengo unupdateTargetModel El siguiente método es mi intento de copiar pesos. El código funciona bien, pero mi implementación general de DQN está fallando. Realmente solo estoy tratando de verificar si esta es una forma válida de copiar pesos de una red a otra.

def updateTargetModel(model, targetModel):
  modelWeights       = model.trainable_weights
  targetModelWeights = targetModel.trainable_weights

  for i in range(len(targetModelWeights)):
    targetModelWeights[i].assign(modelWeights[i])

Aquí hay otra pregunta que trata sobre guardar y cargar pesos hacia y desde el disco (Problema de pesos de copia de Tensorflow), pero no hay una respuesta aceptada. También hay una pregunta sobre la carga de pesos desde capas individuales (Copiar pesos de una capa Conv2D a otra), pero quiero copiar todos los pesos del modelo.

Respuestas a la pregunta(1)

Su respuesta a la pregunta