Tensorflow Keras 从一个模型复制权重到另一个模型

在使用Tensorflow 1.4.1中的Keras时,如何将一个模型的权重复制到另一个模型中?

背景是,我正在尝试按照DeepMind的DQN论文,实现用于Atari游戏的深度Q网络(DQN)。我的理解是,该实现使用了两个网络,Q和Q’。Q的权重通过梯度下降法进行训练,然后这些权重会定期复制到Q’中。

这是我构建Q和Q’的方式:

ACT_SIZE   = 4LEARN_RATE = 0.0025OBS_SIZE   = 128def 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),但我想复制整个模型的权重。


回答:

实际上,你所做的不仅仅是复制权重。你让这两个模型在任何时候都保持相同。每当你更新一个模型时,另一个模型也会被更新——因为这两个模型共享相同的weights变量。

如果你只是想复制权重,最简单的方法是使用以下命令:

target_model.set_weights(model.get_weights()) 

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注