使用来自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
Run Code Online (Sandbox Code Playgroud)
我打电话给他两次以获得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])
Run Code Online (Sandbox Code Playgroud)
这里还有另一个问题,讨论了在磁盘上保存和加载权重(Tensorflow Copy Weights Issue),但没有接受的答案.还有一个关于从单个图层加载权重的问题(将权重从一个Conv2D图层复制到另一个图层),但我想复制整个模型的权重.
我正在努力为深q网络实现优先级经验重放,并且规范的一部分是将梯度乘以重要采样(IS)权重.梯度修改将在以下文章的第3.4节中讨论:https://arxiv.org/pdf/1511.05952.pdf 我正在努力创建一个自定义丢失函数,该函数除了y_true和之外还包含一系列IS权重y_pred.
这是我的模型的简化版本:
import numpy as np
import tensorflow as tf
# Input is RAM, each byte in the range of [0, 255].
in_obs = tf.keras.layers.Input(shape=(4,))
# Normalize the observation to the range of [0, 1].
norm = tf.keras.layers.Lambda(lambda x: x / 255.0)(in_obs)
# Hidden layers.
dense1 = tf.keras.layers.Dense(128, activation="relu")(norm)
dense2 = tf.keras.layers.Dense(128, activation="relu")(dense1)
dense3 = tf.keras.layers.Dense(128, activation="relu")(dense2)
dense4 = tf.keras.layers.Dense(128, activation="relu")(dense3)
# Output prediction, which is an action to take.
out_pred = …Run Code Online (Sandbox Code Playgroud) 我正在使用gym版本 - '0.9.7'和mujoco_py版本1.50.1.41,Python 3.6.1 |Anaconda 4.4.0,安装在Mac上。
尝试时:
import gym
env = gym.make('Humanoid-v1')
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Traceback (most recent call last):
File "/Users/usr/gym/gym/envs/registration.py", line 139, in spec
return self.env_specs[id]
KeyError: 'Humanoid-v1'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/usr/gym/gym/envs/registration.py", line 163, in make
return registry.make(id)
File "/Users/usr/gym/gym/envs/registration.py", line 118, in make
spec = self.spec(id)
File "/Users/usr/gym/gym/envs/registration.py", line 147, in spec
raise error.DeprecatedEnv('Env {} not found (valid versions include {})'.format(id, …Run Code Online (Sandbox Code Playgroud)