python-3.x - Tensorflow Keras 将权重从一个模型复制到另一个模型

标签 python-3.x tensorflow machine-learning neural-network keras

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

作为一些背景,我正在尝试在 DeepMind 发布 DQN 后为 Atari 游戏实现一个深度 q 网络 (DQN)。我的理解是,该实现使用两个网络,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 ),但我想复制整个模型的权重。

最佳答案

实际上,您所做的不仅仅是简单地复制权重。您使这两个模型始终相同。每次更新一个模型时,第二个模型也会更新,因为这两个模型具有相同的权重变量。

如果您只想复制权重 - 最简单的方法是使用此命令:

target_model.set_weights(model.get_weights()) 

关于python-3.x - Tensorflow Keras 将权重从一个模型复制到另一个模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48547688/

相关文章:

python-3.x - 当我想要出现索引时如何使用 numpy.hist

python - 如何按值从集合中删除对象

python - 复杂的排序,使用 cmp 函数很容易完成,但我如何为 Python 3 做计划?

python - 关于 "PIL"错误,NameError : name 'PIL' is not defined

audio - 尝试提出从声波中提取的功能以供人工智能歌曲 Composer 使用

regex - 在python中将相似的字符串分组为单个组

tensorflow - tensorflow 会自动检测 GPU 还是我必须手动指定它?

python - tensorflow 错误 : Invalid argument: shape must be a vector

machine-learning - 在 Siamese 网络中使用 AlexNet 代替 LeNet 模型

machine-learning - 多变量推荐系统