如何编写人工神经网络(井字棋)?

我想使用人工神经网络来玩井字棋。我对网络的配置如下:对于 9 个字段中的每一个,我使用 2 个输入神经元。当然,所以我总共有 18 个输入神经元。对于每个字段,我为玩家 1 的棋子准备 1 个输入神经元,为玩家 2 的棋子准备 1 个神经元。除此之外,我还有 1 个输出神经元,它给出当前棋盘位置的评估。输出值越高,对玩家 1 来说位置越好。输出值越低,对玩家 2 来说位置越好。

但我的问题是:我该如何编写这个神经网络?我的想法是使用一个 Array[1-18] 作为输入神经元。这个数组的值是输入权重。然后我会用一个循环遍历数组。每当有一个神经元被激活,我就把权重加到输出值上。因此,输出值是激活的输入神经元的权重的总和:

Output = SUM(ActivatedInputNeurons)

你认为这是编程网络的好方法吗?你有什么更好的想法吗?

我希望你能帮助我。提前感谢!


回答:

好吧,你有一个由 18 个神经元组成的输入层和一个由 1 个神经元组成的输出层。这没问题。但是,你需要让你的神经网络有机会将输入关联起来。为此,你至少需要一个中间层。我建议在中间层使用 9 个神经元。这些神经元中的每一个都应连接到每个输入神经元,并且输出神经元应连接到每个中间神经元。每个这样的连接都有一个权重,并且每个神经元都有一个激活水平。

然后,你一次一层地遍历所有神经元。输入层只是用棋盘状态激活。对于所有其他神经元,你遍历其各自的连接,并将连接的神经元的激活水平与连接的权重之积求和。最后,你通过对这个总和应用 sigmoid 函数来计算激活水平。

这是工作原理。现在,你需要训练这个网络以获得更好的结果。有几种算法可以做到这一点,你将不得不进行一些谷歌搜索和阅读。最后,如果结果没有足够快地令人信服,你可能需要调整神经元和层的数量。例如,你可以将输入层减少到 9 个神经元,并用 +1 激活 X,用 -1 激活 O。或许添加另一个中间层会产生更好的结果,或者增加一层的神经元数量。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注