拟合模型后返回相同值的Keras RL片段

拟合模型后返回相同值的Keras RL片段,keras,reinforcement-learning,openai-gym,keras-rl,Keras,Reinforcement Learning,Openai Gym,Keras Rl,因此,我使用OpenAI Gym创建了一个自定义环境。我密切关注CartPole示例中DQNAgent的keras rl示例,这将导致以下实现: nb_actions = env.action_space.n # Option 1 : Simple model model = Sequential() model.add(Flatten(input_shape=(1,) + env.observation_space.shape)) model.add(Dense(nb_actions)) m

因此,我使用OpenAI Gym创建了一个自定义环境。我密切关注CartPole示例中DQNAgent的keras rl示例,这将导致以下实现:

nb_actions = env.action_space.n

# Option 1 : Simple model
model = Sequential()
model.add(Flatten(input_shape=(1,) + env.observation_space.shape))
model.add(Dense(nb_actions))
model.add(Activation('linear'))

# Next, we build a very simple model. 
#model = Sequential() 
#model.add(Flatten(input_shape=(1,) + env.observation_space.shape)) 
#model.add(Dense(16)) 
#model.add(Activation('relu')) 
#model.add(Dense(16)) 
#model.add(Activation('relu')) 
#model.add(Dense(16)) 
#model.add(Activation('relu')) 
#model.add(Dense(nb_actions, activation='linear')) 
#model.add(Activation('linear'))

# Finally, we configure and compile our agent. You can use every built-in Keras optimizer and # even the metrics! 

memory = SequentialMemory(limit=50000, window_length=1) 
policy = BoltzmannQPolicy() 
dqn = DQNAgent(model=model, nb_actions=nb_actions, memory=memory, nb_steps_warmup=10, target_model_update=1e-2, policy=policy) 

dqn.compile(Adam(lr=1e-3), metrics=['mae']) 

# Okay, now it's time to learn something! We visualize the training here for show, but this # slows down training quite a lot. You can always safely abort the training prematurely using # Ctrl + C. 

dqn.fit(env, nb_steps=2500, visualize=False, verbose=2) 

# After training is done, we save the final weights. 

dqn.save_weights('dqn_{}_weights.h5f'.format(ENV_NAME), overwrite=True) 

# Finally, evaluate our algorithm for 5 episodes. 

dqn.test(env, nb_episodes=10, visualize=False)
因此,在dqn.test函数调用之前,一切看起来都和我预期的一样。dqn.fit的样本输出如下所示:

。。。 1912/2500:情节:8,持续时间:1.713s,情节步数:239,每秒步数:139,情节报酬:-78.774,平均报酬:-0.330[-27928.57618038.443],平均行动:0.657[0.000,2.000],平均观察:8825.907[5947.40017211.920],损失:7792970.500000,平均绝对误差:653.732361,平均q:1.000000

2151/2500:插曲:9,持续时间:1.790,插曲步数:239,每秒步数:134,插曲报酬:-23335.055,平均报酬:-97.636[-17918.53417819.400],平均动作:0.636[0.000,2.000],平均观察:8825.907[5947.400,17211.920],损失:8051206.500000,平均绝对误差:676.335266,平均值:1.000000

2390/2500:情节:10,持续时间:1.775s,情节步数:239,每秒步数:135,情节报酬:16940.150,平均报酬:70.879[-25552.94817819.400],平均行动:0.611[0.000,2.000],平均观察:8825.907[5947.40017211.920],损失:8520963.000000,平均绝对误差:690.176819,平均观察:1.000000

随着各种奖励的不同,在我看来,这套装置正在按预期工作。但当dqn.test方法运行时,它会为每一集生成相同的输出。就我使用的数据而言,负面奖励是不好的,正面奖励是好的

以下是正在运行的测试方法的结果:

测试10集

  • 第1集:奖励:-62996.100,步骤:239
  • 第二集:奖励:-62996.100,步骤:239
  • 第三集:奖励:-62996.100,步骤:239
  • 第四集:奖励:-62996.100,步骤:239
  • 第五集:奖励:-62996.100,步骤:239
  • 第六集:奖励:-62996.100,步骤:239
  • 第七集:奖励:-62996.100,步骤:239
  • 第八集:奖励:-62996.100,步骤:239
  • 第九集:奖励:-62996.100,步骤:239
  • 第十集:奖励:-62996.100,步骤:239
这就引出了两个问题:

1) 为什么每一集的奖励都是一样的


2) 为什么模型会推荐一组导致可怕奖励的操作?

我会检查env对象,看看它是否已经有奖励计算

我想知道.fit函数是否出于某种原因没有探索状态空间

我最近用开放式AI健身房和Keras做了一个RL项目(月球着陆器),尽管我没有使用DQN代理和其他内置于RL的Keras。我只是建立了一个简单的feedforwad网络。检查这个GitHub链接,看看它是否有用