C++ 在用于处理数据之前,神经网络似乎工作良好(所有结果实际上都是相同的)

C++ 在用于处理数据之前,神经网络似乎工作良好(所有结果实际上都是相同的),c++,neural-network,C++,Neural Network,我最近实现了一个典型的三层神经网络(输入->隐藏->输出),我正在使用sigmoid函数进行激活。到目前为止,主机程序有3种模式: 创造,这似乎工作得很好。它创建具有指定数量的输入、隐藏和输出神经元的网络,将权重初始化为随机值或零 训练加载数据集,计算网络的输出,然后反向传播错误并更新权重。据我所知,这一切正常。在数据集上进行训练后,权重会发生变化,但不会非常剧烈 处理,这似乎工作正常。但是,用于培训的数据集或任何其他数据集的数据输出非常糟糕。它通常是一个连续的1流,偶尔有一个0.9999999

我最近实现了一个典型的三层神经网络(输入->隐藏->输出),我正在使用sigmoid函数进行激活。到目前为止,主机程序有3种模式:

  • 创造,这似乎工作得很好。它创建具有指定数量的输入、隐藏和输出神经元的网络,将权重初始化为随机值或零
  • 训练加载数据集,计算网络的输出,然后反向传播错误并更新权重。据我所知,这一切正常。在数据集上进行训练后,权重会发生变化,但不会非常剧烈
  • 处理,这似乎工作正常。但是,用于培训的数据集或任何其他数据集的数据输出非常糟糕。它通常是一个连续的1流,偶尔有一个0.9999999,或者每个输入的每个输出值都是0.9999,最后的数字在输入之间是不同的。据我所知,最后两位数字和应该输出的数据之间没有相关性

  • 我应该如何着手找出哪些工作不正常?

    您需要找到一组参数(神经元数量、学习速率、训练迭代次数),这些参数可以很好地对以前未看到的数据进行分类。人们通常通过将数据分为三组来实现这一目标:培训、验证和测试


    无论您决定做什么,请记住,在您培训的同一数据上进行测试是没有意义的,因为任何接近合理的分类方法都应该在这样的设置下100%地正确无误。

    您需要找到一组参数(神经元数量、学习速率、训练迭代次数)对以前看不见的数据进行分类。人们通常通过将数据分为三组来实现这一点:训练、验证和测试


    无论您决定做什么,请记住,在您培训的相同数据上进行测试是没有意义的,因为任何接近合理的分类方法都应该在这样的设置下100%正确地完成所有工作。

    我基本上同意您的意见。您所说的培训迭代次数是什么意思?是的,我知道测试n我训练的数据没有意义,但如果它甚至不能做到这一点,你认为它在以前看不见的数据上的表现如何(它的准确率相同,所以完全没有用)?我想说的是,我认为问题不在于网络的架构,而在于我的代码中的某个地方。我基本上同意你的观点。你所说的培训迭代次数是什么意思?是的,我知道对我培训的数据进行测试是没有意义的,但如果它甚至不能做到这一点,你会做得怎么样我的意思是,我认为问题出在网络架构之外的其他地方,我相信问题出在我的代码中。