如何从一个模型复制到另一个模型?
作为一些背景,我正试图在DeepMind发布DQN之后,为Atari游戏实现一个deep-q网络(DQN).我的理解是,实现使用了两个网络,Q和Q’.然后使用梯度将权重复制到Q′.
以下是我如何构建Q和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
我打两次电话来得到Q和Q'.
下面我有一个updateTargetModel
的方法,这是我复制重量的try .代码运行良好,但我的DQN整体实现失败了.我只是想验证一下,这是否是一种将权重从一个网络复制到另一个网络的有效方法.
def updateTargetModel(model, targetModel):
modelWeights = model.trainable_weights
targetModelWeights = targetModel.trainable_weights
for i in range(len(targetModelWeights)):
targetModelWeights[i].assign(modelWeights[i])
这里还有一个问题讨论如何将权重保存到磁盘(Tensorflow Copy Weights Issue)或从磁盘(Tensorflow Copy Weights Issue)加载权重,但没有公认的答案.还有一个关于从各个层加载权重的问题(Copying weights from one Conv2D layer to another),但我想复制整个模型的权重.