感知器采用一组输入的加权线性组合,并输出 1 或 0,具体取决于结果是正数还是负数。可以说,人工智能是通过权重来实现的,这些权重决定了数据的分割。一侧结果为阳性,另一侧为阴性。这种分割可以被认为是图上的一条线。例如,如果权重给出一条线 y=x,则输入 x = 2, y = 4 为正,输入 x = -1, y = 1 为负。通过向系统提供正负输入集并调整权重直到训练集的输出与所需的输出匹配,来训练权重。
输入的数量由像素数给出,每个像素都有自己的输入和相关的权重,因此权重是一个与图像大小相同的数组。
对于您的示例,您将需要一组带有预期噪声的敌人目标的图像。这些所需的输出将是正的,因此将所有图像呈现给感知器并检查输出。如果输出不是 1,则调整权重。接下来显示一个非敌人图像并检查输出是否为 0。如果没有调整权重。继续显示正图像并检查输出 1,负图像检查 0,调整权重直到得到输出。
最初,权重被设置为小的随机数。如果实际输出与期望的输出不匹配,它不会开始,请通过以下等式调整每个权重:
w(t+1) = w(t) + a(dy)x
因此,新权重是旧权重加上 alpha 乘以所需输出减去实际结果乘以输入,(对于该像素)
Alpha可以随着训练的进行而改变。一开始它很大,所以收敛很快。随着时间的推移,最好减少数量以减慢收敛速度,使其更加准确。Alpha,学习率应该是0
所以在Java中:
创建一个权重数组并将它们初始化为小的随机数。
创建一组输入图像和相应的所需输出。
选择一个随机图像并将其呈现给系统。- 将输入乘以权重,将它们相加并找到符号。
根据期望输出检查输出。如果它们相同,请选择另一个输入图像。如果存在差异,则通过方程式调整权重,然后选择另一个输入图像。
继续显示输入,直到总误差低于某个阈值。
当系统被训练时,可以将看不见的图像呈现给系统。如果它是敌方目标,它将输出 1,如果不是 0。
所有细节都可以在网上找到,维基页面,有更多的解释,但希望它有所帮助。