1

根据this tutorial(纯NumPy的Python),我想建立一个简单的(最简单的学习目的)神经网络(Perceptron),它可以训练识别“一封信。在本教程中,在提出的示例中,他们构建了一个可以学习“AND”逻辑运算符的网络。在这种情况下,我们有一些输入(4×3矩阵)和一个输出(4 * 1矩阵):训练字母图像到全批培训的神经网络

enter image description here

每次我们减去输出矩阵与输入矩阵和计算误差和更新率和等等。

现在我想给一个图像作为输入,在这种情况下,我的输出是什么?我怎样才能定义那个图像是一个“A”字母?一种解决方案是将“1”定义为“A”字母,将“0”定义为“非A”,但是如果我的输出是标量,我怎样才能用隐藏层减去它并计算错误和更新权重?本教程使用“全批”训练并将整个输入矩阵与权重矩阵相乘。我想用这种方法。最终的目标是设计一个能够以最简单的形式识别“A”字母的神经网络。我不知道如何做到这一点。

回答

2

Fist off:很好,你试图通过从头开始编程来理解神经网络,而不是从一些复杂的库开始。让我试着清理一下:你的理解在这里:

每次我们用输入矩阵减去输出矩阵并计算误差和更新率等等。

是不正确的。在你的例子中,输入矩阵X是你呈现给你的神经网络的输入。输出Y是您希望网络为X执行的操作:第一个元素Y[0]是第一行X的期望输出,依此类推。我们经常称之为“目标载体”。现在计算损失函数(即错误),我们将网络的输出(链接示例代码中的L2)与目标矢量Y进行比较。换句话说,我们将想要网络做的(Y)与真的做的(L2)做了比较。然后我们朝着更接近Y的方向迈出一步。

现在,如果您想使用图像作为输入,您应该将图像中的每个像素视为一个输入变量。此前,我们有两个输入变量:A和B,为此我们想要计算的术语X = A∧B.

如果我们取一个8×8像素的图像,我们有8 * 8 = 64个输入变量。因此,我们的输入矩阵X应该是一个有65列的矩阵(图像的64个像素+ 1个输入作为偏置项,它总是= 1),每个训练样例有一行。例如。如果您有26个字母中的每一个的一个图像,矩阵将包含26行。

输出(目标)矢量Y应该具有与X相同的长度,即前面例子中的26。 Y中的每个元素在相应的输入行是A时为1,如果是另一个字母则为0。在我们的示例中,Y[0]将为1,Y[1:]将为0。

现在,您可以使用与以前相同的代码:输出L2将是一个包含网络预测的向量,然后您可以像之前一样比较Y

tl; dr关键的想法是忘记图像是2D,并将每个输入图像存储为矢量。

+1

感谢您的出色答案。你最后一句救了我。 “将每个输入图像存储为矢量”。 我想我必须使用初始形式的图像。现在,如果我将它转换为矢量,我可以设计我的模型。 再次感谢。 – Fcoder