使用DQN实现AI自动玩FlappyBird

DQN是强化学习的系列方法之一。

这里简单介绍一下强化学习,强化学习是以一种不断“试错”的方式,通过与环境的交互获得的奖赏指导行为,从而使模型获得最大化奖赏,由于外部环境提供的强化信号仅仅是对模型动作的一种评价,强化学习必须靠自身的经历进行学习,通过这种方式,模型得以从行动-评价的环境中学到知识,从而改善自身。DQN是传统的强化学习方法Q-Learning和Deep-Learning的结合体。

读者可按照上知识树对DQN进行学习。

网络结构代码如下:

 1 def Net():
 2     state_shape, action_dim = [80, 80, 4], 2
 3     actions = Input([action_dim])
 4     state = Input(state_shape)
 5 
 6     x = Conv2D(32, kernel_size=8, strides=4, padding="same")(state)
 7     x = Activation("relu")(x)
 8     x = MaxPool2D(pool_size=2)(x)
 9 
10     x = Conv2D(64, kernel_size=4, strides=2, padding="same")(x)
11     x = Activation('relu')(x)
12 
13     x = Conv2D(64, kernel_size=3, strides=1, padding="same")(x)
14     x = Activation('relu')(x)
15 
16     x = Flatten()(x)
17     x = Dense(512)(x)
18     x = Activation('relu')(x)
19 
20     out1 = Dense(action_dim)(x)
21 
22     out2 = Dot(-1)([actions, out1])
23     model = keras.Model([state, actions], out2)
24     optimizer = keras.optimizers.Adam(1e-6)
25     # optimizer = keras.optimizers.SGD(lr=1e-5, decay=1e-6, momentum=0.9, nesterov=True)
26     loss = keras.losses.mse
27     model.compile(optimizer=optimizer, loss=loss)
28     model.summary()
29     return model

最终训练280epoch之后(每个epoch训练10000帧图像),结果如图:

原文地址:https://www.cnblogs.com/zdm-code/p/13872247.html