TensorFlow 神经网络作为 API?
Posted
技术标签:
【中文标题】TensorFlow 神经网络作为 API?【英文标题】:TensorFlow neural network as an API? 【发布时间】:2018-10-27 02:32:08 【问题描述】:我正在为游戏 2048 编写 AI。目前,我可以从浏览器中提取游戏状态并将动作发送到游戏,但我不知道如何将其与 TensorFlow 集成。该项目的性质不利于训练数据,所以我想知道是否可以通过游戏状态,让网络抛出一个动作,运行这个动作,重复直到游戏结束,然后有培训吗?
【问题讨论】:
【参考方案1】:这当然是可能的,也是微不足道的。你必须设置你想使用的模型,我会假设它已经构建好了。
从与 tensorflow 模型交互的角度来看,您只需要将数据编组到 numpy 数组中,然后通过 sess.run
的 feed_dict
属性传入。
要将输入传递给 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
不依赖于优化器。
假设您将随机初始化此模型,因此第一个结果将随机生成,但之后的每一步都将受益于之前应用的更新。
如果您使用的是强化学习模型,那么您只会在未来某个不确定的时间产生奖励,并且当您运行更新时会与此示例略有不同,但问题的一般性质保持不变.
【讨论】:
好的,谢谢,我想知道这么微不足道的事情怎么会在我的谷歌搜索中如此难以捉摸。因此,如果我有 16 个输入神经元,我只需制作一个包含 16 个值的字典,而变量“结果”将只是输出神经元?这是非常有用的东西,谢谢。 一个简单的 16 个值的 numpy 向量是您的输入。输出将只有 1 个值,再次是 numpy ndarray 数据类型。 tensorflow 的输入/输出以 numpy 格式发生。 对对,麻木。有空我会试试的,非常感谢。 优化器把我绊倒了。据我了解,类似的代码应该优化图形以从 input_data 到标签,但我只有一个分数作为输出,它完全不依赖于输入数据。我尝试使用 -1*score 制作梯度下降最小化器,但它一直说没有提供梯度? 您需要一个损失函数,将网络产生的输出与您想要的输出进行比较。这种损失将是网络输出和您的预期结果的函数。如果您只有一个分数而不是预期的输出来比较,那么您需要研究强化学习。查看 OpenAI 健身房:gym.openai.com以上是关于TensorFlow 神经网络作为 API?的主要内容,如果未能解决你的问题,请参考以下文章
TensorFlow2.0TensorFlow 2.0高阶API: Keras—使用Keras基于Squential的序列编排模式创建神经网络过程(附带源码)