在Tensorflow 1.4.1中使用Keras,如何将一个模型的权重复制到另一个模型中?
作为一些背景信息,我正在尝试实现DeepMind的DQN Atari游戏。据我所知,该实现使用两个网络,Q和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
方法,我尝试复制权重。代码运行正常,但我的整个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),但尚未有被接受的答案。还有一个关于如何从单个层加载权重的问题 (Copying weights from one Conv2D layer to another),但我想复制整个模型的权重。