我正在为游戏 2048 编写 AI。目前,我可以从浏览器中提取游戏状态并将动作发送到游戏,但我不知道如何将其与 TensorFlow 集成。该项目的性质不利于训练数据,所以我想知道是否可以通过游戏状态,让网络抛出一个动作,运行这个动作,重复直到游戏结束,然后有培训吗?
问问题
84 次
1 回答
1
这当然是可能的,也是微不足道的。你必须设置你想要使用的模型,我会假设它已经构建好了。
从与 tensorflow 模型交互的角度来看,您只需要将数据编组到 numpy 数组中,然后通过feed_dict
.sess.run
要将输入传递给 tensorflow 并获得结果,您将运行如下内容:
result = sess.run([logits], feed_dict={x:input_data})
这将执行前向传递,生成模型的输出,而不进行任何更新。现在您将使用results
并使用它们在游戏中进行下一步。
现在您有了操作的结果(例如标签),您可以执行更新步骤:
sess.run([update_op], feed_dict={x:input_data, y:labels})
就这么简单。请注意,您的模型将定义一个优化器(update_op
在此示例中),但如果您不要求 tensorflow 计算它(如在第一个代码示例中),则不会发生更新。TensorFlow 是关于依赖图的。优化器依赖于输出logits
,但计算logits
不依赖于优化器。
假设您将随机初始化此模型,因此将随机生成第一个结果,但之后的每一步都将受益于之前应用的更新。
如果您使用的是强化学习模型,那么您只会在未来某个不确定的时间产生奖励,并且当您运行更新时会与此示例略有不同,但问题的一般性质保持不变。
于 2018-05-16T23:11:47.547 回答