因此,我已经使用OpenAI Gym创建了一个自定义环境。我密切关注CartQole示例的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)为什么每个情节的奖励都相同?
2)为什么该模型会建议一系列导致可怕奖励的动作?
答案 0 :(得分:0)
我将检查env对象,看看它是否已经在其中进行奖励计算。
我想知道.fit函数是否由于某种原因没有探索状态空间。
我最近使用开放的AI健身房和Keras进行了RL项目(月球着陆器),尽管我没有使用DQN代理和其他内置RL内容的Keras。我只是建立了一个简单的feedforwad网络。检查此GitHub链接是否有帮助? https://github.com/tianchuliang/techblog/tree/master/OpenAIGym