我正在使用仅包含一个隐藏层的C ++构建神经网络。我的神经网络接受2个输入并产生1个输出,前两个节点带有偏置节点。当我仅用一种类型的数据训练网络时(例如输入=(0,0),所需的输出= 1),网络训练得很好。但是当我用两种类型训练时(例如(0,0)-> 1,(1,0)-> 0),网络性能会非常差。我所做的就是循环播放
向后传播
设置所需的输入=(1,0),设置所需的输出= 0
以下是代码摘录
vector<double> input0, output0;
input0.push_back(0);
input0.push_back(0);
output0.push_back(1);
vector<double> input1, output1;
input1.push_back(1);
input1.push_back(0);
output1.push_back(0);
for(int i = 0; i < 2000; i++){
n->setUserInput(input0);
n->setIdealOutputs(output0);
n->feedForward();
n->backPropagate();
n->setUserInput(input1);
n->setIdealOutputs(output1);
n->feedForward();
n->backPropagate();
}
当我仅执行循环中的两个块之一时,网络运行良好。出乎意料的是,如果我有两种类型的输入,两者都具有相同的输出,则网络运行良好。这让我感到困惑。我用两种类型的数据训练网络的方式有什么问题吗?