Python 利用整批训练将字母图像训练成神经网络

Python 利用整批训练将字母图像训练成神经网络,python,numpy,machine-learning,neural-network,artificial-intelligence,Python,Numpy,Machine Learning,Neural Network,Artificial Intelligence,根据(Pure Python with NumPy),我想构建一个简单的(用于学习目的的最简单级别)神经网络(Perceptron),它可以训练识别“a”字母。在本教程中,在建议的示例中,他们构建了一个可以学习“AND”逻辑运算符的网络。在这种情况下,我们有一些输入(4*3矩阵)和一个输出(4*1矩阵): 每次我们用输入矩阵减去输出矩阵,计算误差和更新率等 现在我想给一个图像作为输入,在这种情况下,我的输出是什么?我如何定义图像是一个“A”字母?一种解决方案是将“1”定义为“A”字母,将“0”

根据(Pure Python with NumPy),我想构建一个简单的(用于学习目的的最简单级别)神经网络(Perceptron),它可以训练识别“a”字母。在本教程中,在建议的示例中,他们构建了一个可以学习“AND”逻辑运算符的网络。在这种情况下,我们有一些输入(4*3矩阵)和一个输出(4*1矩阵):

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


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

首先:很好,你可以尝试通过从头开始编程来理解神经网络,而不是从一些复杂的库开始。让我来澄清一下:你的理解是:

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

这并不是真的正确。在您的示例中,输入矩阵
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。如果对应的输入行是A,则Y中的每个元素都是1,如果是另一个字母,则为0。在我们的示例中,
Y[0]
将是1,
Y[1://code>将是0

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


tl;dr关键思想是忘记图像是二维的,而将每个输入图像存储为向量。

感谢您的精彩回答。你最后一句话救了我。“将每个输入图像存储为向量”。我在想我必须用一个图像作为初始形式。现在,如果我把它转换成一个向量,我就可以设计我的模型了。再次感谢。