0

所以我使用 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.576, 18038.443],平均动作:0.657 [ 0.000, 2.000],平均观察值:8825.907 [5947.400, 17211.920],损失:7792970.500000,mean_absolute_error:653.732361,mean_q:1.000000

2151/2500:剧集:9,持续时间:1.790s,剧集步数:239,每秒步数:134,剧集奖励:-23335.055,平均奖励:-97.636 [-17918.534, 17819.400],平均动作:0.636 [0.000, 2.000 ],平均观察值:8825.907 [5947.400, 17211.920],损失:8051206.500000,mean_absolute_error:676.335266,mean_q:1.000000

2390/2500:剧集:10,持续时间:1.775s,剧集步数:239,每秒步数:135,剧集奖励:16940.150,平均奖励:70.879 [-25552.948, 17819.400],平均动作:0.611 [0.000, 2.000],平均观察:8825.907 [5947.400, 17211.920],损失:8520963.000000,mean_absolute_error:690.176819,mean_q:1.000000

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

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

测试 10 集

  • 第1集:奖励:-62996.100,步数:239
  • 第2集:奖励:-62996.100,步数:239
  • 第3集:奖励:-62996.100,步数:239
  • 第4集:奖励:-62996.100,步数:239
  • 第5集:奖励:-62996.100,步数:239
  • 第6集:奖励:-62996.100,步数:239
  • 第7集:奖励:-62996.100,步数:239
  • 第8集:奖励:-62996.100,步数:239
  • 第9集:奖励:-62996.100,步数:239
  • 第10集:奖励:-62996.100,步数:239

这让我想到了两个问题:

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

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

4

1 回答 1

0

我会检查 env 对象,看看它是否已经在那里进行了奖励计算。

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

我最近做了一个带有开放 AI 健身房和 Keras 的 RL 项目(月球着陆器),尽管我没有使用 DQN 代理和其他内置在 RL 中的 Keras。我只是建立了一个简单的前馈网络。检查这个 GitHub 链接,看看它是否有帮助?https://github.com/tianchuliang/techblog/tree/master/OpenAIGym

于 2018-07-26T13:52:41.663 回答