C++ 基于反向传播神经网络的人脸识别?

C++ 基于反向传播神经网络的人脸识别?,c++,machine-learning,neural-network,backpropagation,C++,Machine Learning,Neural Network,Backpropagation,我对图像处理非常陌生,我的第一项任务是制作一个工作程序,可以识别人脸和他们的名字。 到目前为止,我成功地制作了一个项目来检测,裁剪检测到的图像,将其转换为sobel并将其转换为浮点数组。 但是,我非常困惑如何实现反向传播MLP来学习图像,以便它能够识别检测到的人脸的正确名称 stackoverflow领域的所有专家都很荣幸能给我举一些例子,说明如何使用反向传播实现要学习的图像阵列 您是否尝试过将特征向量写入一个文件并将其提供给,只是为了看看您的方法是否可行? Weka集成了很多分类器,包括MLP

我对图像处理非常陌生,我的第一项任务是制作一个工作程序,可以识别人脸和他们的名字。 到目前为止,我成功地制作了一个项目来检测,裁剪检测到的图像,将其转换为sobel并将其转换为浮点数组。 但是,我非常困惑如何实现反向传播MLP来学习图像,以便它能够识别检测到的人脸的正确名称


stackoverflow领域的所有专家都很荣幸能给我举一些例子,说明如何使用反向传播实现要学习的图像阵列

您是否尝试过将特征向量写入一个文件并将其提供给,只是为了看看您的方法是否可行? Weka集成了很多分类器,包括MLP。 据我目前所知,我怀疑您选择的功能和分类器不起作用

对于你最初的问题:你有没有尝试过自己实现一个神经网络?如果是的话,你被困在哪里了?请注意,这不是向受众请求完整的工作实现的地方

就一般性问题提供一般性答案: 通常在MLP中有节点。特别是输入节点、输出节点和隐藏节点。这些节点严格按层组织。底部是输入层,顶部是输出层,中间是隐藏层。节点以简单的前馈方式连接(只允许输出连接到下一个更高的层)。 然后,将每个
float
连接到单个输入节点,并将特征向量提供给网络。对于反向传播,需要提供为输出节点指定的错误信号。因此,如果要区分
n
名称,可以使用
n
输出节点(即每个名称对应一个节点)。例如,如果存在匹配项,则使其返回
1
,否则返回
0
。您可以很好地使用一个输出节点,让它为名称返回不同的值。甚至最好使用完全不同的感知机,即每个名称一个,以避免一些副作用(灾难性干扰)

请注意,每个节点的输出都是一个数字,而不是一个名称。因此,您需要使用某种阈值来获得数字-名称关系。 还要注意的是,您需要大量的培训数据来培训大型网络(即遵守规则)。了解
float
数组的大小会很有趣。 实际上,对于一个复杂的决策,您可能需要更多的隐藏节点甚至隐藏层。 进一步注意,您可能需要进行大量评估(即)以找到最佳配置(层数、每层节点数),或者甚至找到任何工作配置


祝你好运,无论如何

您是否尝试过将特征向量写入一个文件并将其提供给,只是为了看看您的方法是否可行? Weka集成了很多分类器,包括MLP。 据我目前所知,我怀疑您选择的功能和分类器不起作用

对于你最初的问题:你有没有尝试过自己实现一个神经网络?如果是的话,你被困在哪里了?请注意,这不是向受众请求完整的工作实现的地方

就一般性问题提供一般性答案: 通常在MLP中有节点。特别是输入节点、输出节点和隐藏节点。这些节点严格按层组织。底部是输入层,顶部是输出层,中间是隐藏层。节点以简单的前馈方式连接(只允许输出连接到下一个更高的层)。 然后,将每个
float
连接到单个输入节点,并将特征向量提供给网络。对于反向传播,需要提供为输出节点指定的错误信号。因此,如果要区分
n
名称,可以使用
n
输出节点(即每个名称对应一个节点)。例如,如果存在匹配项,则使其返回
1
,否则返回
0
。您可以很好地使用一个输出节点,让它为名称返回不同的值。甚至最好使用完全不同的感知机,即每个名称一个,以避免一些副作用(灾难性干扰)

请注意,每个节点的输出都是一个数字,而不是一个名称。因此,您需要使用某种阈值来获得数字-名称关系。 还要注意的是,您需要大量的培训数据来培训大型网络(即遵守规则)。了解
float
数组的大小会很有趣。 实际上,对于一个复杂的决策,您可能需要更多的隐藏节点甚至隐藏层。 进一步注意,您可能需要进行大量评估(即)以找到最佳配置(层数、每层节点数),或者甚至找到任何工作配置


祝你好运,无论如何

这是标准的机器学习算法。您有许多浮点数组(ML中的实例或统计术语中的观察值)和相应的名称(标签、类标记),每个数组一个。这对于大多数ML算法来说已经足够了。特别是在ANN中,数组的元素(即特征)是网络的输入,标签(名称)是网络的输出

如果您正在寻找反向传播的理论描述,请参阅(ANN部分)。如果您需要现成的实现,请阅读


您尚未指定数组的元素。如果您只使用原始图像的像素,这应该可以工作,但不是很好。如果您需要生产级系统(尽管仍然使用ANN),请尝试提取更多高级功能(例如OpenCV本身使用的功能)。

这是标准的机器学习算法。你有