首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法在tensorflow中专门优化神经网络的单个输出?

有没有办法在tensorflow中专门优化神经网络的单个输出?
EN

Stack Overflow用户
提问于 2018-12-18 21:25:58
回答 1查看 54关注 0票数 0

例如,如果我有一个正在玩跳棋/跳棋的神经网络,并试图进行无效的移动,有没有一种方法可以专门优化那个特定的输出?

代码语言:javascript
复制
  ---------------------------------------
8 |    | bM |    | bM |    | bM |    | bM | 
  ---------------------------------------
7 | bM |    | bM |    | bM |    | bM |    | 
  ---------------------------------------
6 |    | bM |    | bM |    | bM |    | bM | 
  ---------------------------------------
5 |    |    |    |    |    |    |    |    | 
  ---------------------------------------
4 |    |    |    |    |    |    |    |    | 
  ---------------------------------------
3 | wM |    | wM |    | wM |    | wM |    | 
  ---------------------------------------
2 |    | wM |    | wM |    | wM |    | wM | 
  ---------------------------------------
1 | wM |    | wM |    | wM |    | wM |    | 
  ---------------------------------------
    A    B    C    D    E    F    G    H  

如果棋盘看起来像这样,在吃水区域中的每一个可能的移动(在任何方向上最多移动2次)都有一个输出神经元,那么64 *8个输出神经元,如果最高概率的输出是神经元8(或任何其他无效输出),这将类似于B1C2 (B1是开始位置,C2是结束位置)。

如果神经网络的输出已经是概率分布,是否有一种方法可以更新网络,使此特定输出为0,并对所有其他输出进行更新和归一化?

我试着查看了在mnist数据集和adamoptimizer上训练的神经网络的例子,但找不到任何只改变一个特定输出而不是改变整个输出层的东西。

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

发布于 2018-12-18 21:47:37

对于这个特定的例子,你最好重组你的网络,只包括可能有效的移动。B1C2永远不会是一个有效的举动,所以不要让它成为你网络的一部分。

对于可能有效但实际上无效的移动,例如B2C3 (在第一轮中无效,但在移动当前在C3上的棋子之后有效),您可以编写一个自定义激活函数,但只调整输出可能会更容易。

您可以编写一个函数,将每个无效移动设置为零,然后将所有其他答案除以(1 -无效移动预测的总和)。请注意,这假设您已经使用softmax作为最后的激活函数。

基于以下后续问题的编辑:

您可以编写一个函数,该函数将棋盘状态和预测作为输入,并返回无效移动设置为零的预测,并对其余预测进行标准化。

如果不是修改最终结果,而是让网络了解哪些移动是无效的,则可以由损失函数来处理。例如,如果你正在做深度Q学习,那么你会对无效移动的分数增加沉重的惩罚。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53834072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档