Python 3.x Tensorflow Keras将权重从一个模型复制到另一个模型
使用Tensorflow 1.4.1中的KERA,如何将权重从一个模型复制到另一个模型 作为一些背景,我正试图在DeepMind发布DQN之后,为Atari游戏实现一个deep-q网络(DQN)。我的理解是,实现使用两个网络,Q和Q’。使用梯度下降法训练Q的权重,然后周期性地将权重复制到Q′ 下面是我如何构建Q和Q':Python 3.x Tensorflow Keras将权重从一个模型复制到另一个模型,python-3.x,tensorflow,machine-learning,neural-network,keras,Python 3.x,Tensorflow,Machine Learning,Neural Network,Keras,使用Tensorflow 1.4.1中的KERA,如何将权重从一个模型复制到另一个模型 作为一些背景,我正试图在DeepMind发布DQN之后,为Atari游戏实现一个deep-q网络(DQN)。我的理解是,实现使用两个网络,Q和Q’。使用梯度下降法训练Q的权重,然后周期性地将权重复制到Q′ 下面是我如何构建Q和Q': ACT_SIZE = 4 LEARN_RATE = 0.0025 OBS_SIZE = 128 def buildModel(): model = tf.keras
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])
这里还有另一个问题讨论如何在磁盘()中保存和加载权重,但没有公认的答案。还有一个关于从各个层()加载权重的问题,但我想复制整个模型的权重。实际上,您所做的不仅仅是复制权重。您一直使这两个型号完全相同。每次更新一个模型时,第二个模型也会更新,因为两个模型都具有相同的
权重
变量
如果只想复制权重-最简单的方法是通过以下命令:
target_model.set_weights(model.get_weights())
Keras FAQ包括保存和加载模型权重。您可以保存/加载所有权重,也可以分层:谢谢Manngo。我已经回顾了保存和加载模型,并在问题的最后通过第一个问题提到了这些模型。然而,我的问题是,在没有中间文件的情况下直接将权重从一个模型复制到另一个模型。谢谢Marcin,这正是我所担心的。我这样做的时候,Q'中的权重基本上是参考Q中的权重?在使用您的方法复制后,我是否需要重新编译目标模型或其他任何内容?欢迎:)我很高兴能提供帮助。祝您的项目好运。
clone\u model
有什么区别?只是想提醒阅读本文的人:clone_model函数与其名称不同,它不会复制权重