![]() |
1
15
你有一个18个神经元的输入层和一个1个神经元的输出层。没关系。然而,你需要给你的神经网络一个机会,把输入信息联系起来。为此,您至少需要一个中间层。我建议在中间层使用9个神经元。每个神经元都应该连接到每个输入神经元,而输出神经元应该连接到每个中间神经元。每个这样的连接都有一个权重,每个神经元都有一个激活水平。 然后,你一次穿过所有的神经元,一层一层。输入层刚被板状态激活。对于所有其他的神经元,你要通过它们各自的连接,并求和连接神经元的激活水平和连接重量的乘积。最后,通过在这个和上应用一个sigmoid函数来计算激活水平。 这就是工作原理。现在,你需要训练这个网络以获得更好的结果。这有几种算法,你需要做一些谷歌搜索和阅读。最后,当结果不够令人信服时,您可能需要调整神经元和层的数量。例如,您可以将输入层减少到9个神经元,并用+1(对于x)激活它们,用-1(对于o)激活它们。也许添加另一个中间层会产生更好的结果,或者增加一个层的神经元数量。 |
![]() |
2
5
我不太明白您如何期望从一个输出神经元中得到一个有意义的电路板情况摘要。我更愿意看到:
在完全连接的网络中,即81个砝码。然后训练输出神经元在这个位置上演奏的相对可取性。 |
![]() |
3
4
看看我的TIC项目。我用神经网络和遗传算法解决了这个问题。源代码是免费提供的。 http://www.roncemer.com/tic-tac-toe-an-experiment-in-machine-learning |
![]() |
4
3
我认为你应该实施一个“传统的” feed-forward ANN 使用传递函数,因为这允许您使用反向传播来训练它。这些代码通常是几行代码,如下所示:
|
![]() |
5
0
对于人工智能编码来说,这是一个很好的入门项目,但是提出一个完整的解决方案将是解决这一问题的重要途径。
与大多数软件一样,我建议使用面向对象的设计。例如:定义
参见维基百科上的文章 artificial neural networks 为了一个好的起点。 祝你好运!听起来很有趣。 |
![]() |
7
0
在添加权重之后,您需要使用一个函数来规范化和,如果您想允许负数,人们通常使用tanh。 编辑: Here is a java multilayer perceptron 几年前我研究的实现。这一个用于检查程序,但输入较少,您也可以将其用于检查程序。 另外,你可能需要找到一种方法来教它如何取胜,但这是另一个问题。 |
![]() |
8
0
如果您使用神经网络库(如fann或neuroph),将节省时间。 对输入进行编码的一种方法是9个输入神经元。9个神经元的输出也很好。我在其他回放中没有看到的是隐藏层的大小。我想您将使用传统的三层MLP。隐藏层的大小一直是个谜。我会尝试10个隐藏的神经元。 如果传输功能是乙状结肠,您可以对输入进行如下编码: 0位球员。 1 - X播放器。 0.5 -空。 神经网络的输出将是9个实数。在这种情况下,某些单元格将被占用。可以搜索与空单元格对应的最高输出值。 |