C++ 神经网络不学习。停留在50%

C++ 神经网络不学习。停留在50%,c++,neural-network,C++,Neural Network,我是NNs的初学者。我试图为XOR函数创建一个NN,但它没有学习,它停留在50% 谁能给我一些建议吗?谢谢 代码如下: ///Matrix.cpp #include "pch.h" #include "Matrix.h" .... Matrix Matrix::sigmoidDerivate(const Matrix &m) { assert(m.rows >= 1 && m.cols >= 1); Matrix tmp(m.rows, m

我是NNs的初学者。我试图为XOR函数创建一个NN,但它没有学习,它停留在50% 谁能给我一些建议吗?谢谢 代码如下:

///Matrix.cpp

#include "pch.h"
#include "Matrix.h"
....
 Matrix Matrix::sigmoidDerivate(const Matrix &m) {
    assert(m.rows >= 1 && m.cols >= 1);

    Matrix tmp(m.rows, m.cols);
    for (ushort i = 0; i < tmp.rows; i++) {
        for (ushort j = 0; j < tmp.cols; j++) {
            tmp.mat[i][j] = m.mat[i][j]*(1-m.mat[i][j]);
        }
    }
    return tmp;
}

Matrix Matrix::sigmoid(const Matrix &m) {
    assert(m.rows >= 1 && m.cols >= 1);

    Matrix tmp(m.rows, m.cols);
    for (ushort i = 0; i < tmp.rows; i++) {
        for (ushort j = 0; j < tmp.cols; j++) {
            tmp.mat[i][j]= 1 / (1 + exp(-m.mat[i][j]));
        }
    }
    return tmp;
}


Matrix Matrix::randomMatrix(ushort rows, ushort cols) {
    assert(rows>=1 && cols>=1);

    Matrix tmp(rows,cols);

    const int range_from = -3;
    const int range_to = 3;
    std::random_device                  rand_dev;
    std::mt19937                        generator(rand_dev());
    std::uniform_real_distribution<double>  distr(range_from, range_to);

    for (ushort i = 0; i < rows; i++) {
        for (ushort j = 0; j < cols; j++) {
            tmp.mat[i][j] = distr(generator);
        }
    }
    return tmp;
}
#包括“pch.h”
#包括“矩阵h”
....
矩阵::sigmoiderivate(常数矩阵和m){
断言(m.rows>=1和&m.cols>=1);
矩阵tmp(m行,m列);
对于(ushort i=0;i=1和&m.cols>=1);
矩阵tmp(m行,m列);
对于(ushort i=0;i=1&&cols>=1);
矩阵tmp(行、列);
const int range_from=-3;
const int range_to=3;
std::随机设备和设备开发;
std::mt19937生成器(rand_dev());
标准:均匀实分布分布(范围从,范围到);
对于(ushort i=0;i
这是main():

矢量输入={
{0,0},
{1,0},
{0,1},
{1,1}
};
向量out={0,1,1,0};
const-ushort输入神经元=2;
const-ushort-hiddenNeurons=3;
const-ushort输出神经元=1;
常数双学习率=0.03;
矩阵w_0_1=矩阵::随机矩阵(输入神经元,隐神经元);
矩阵w_1_2=矩阵::随机矩阵(隐神经元,输出神经元);
无符号整数历元=100000;
for(int i=0;i
NN架构为:2->3->1 在隐藏层中,如果数字较小,如2-4,则输出为50%。对于隐藏层上的8个神经元,输出约为49%。
请帮忙。

我不是C++的,所以我不确定。但话说回来:

 Matrix::substract(Layer_2, desired_output),
您正在做的事情类似于从现有层中减去所需的“良好”输出。我认为应该是相反的。所以你必须把它乘以-1


对我来说就是这样。如果你愿意,我可以把我的源代码发给你。(它是java)

欢迎使用SO。我们在此重点讨论具体的编程/实现问题。看看这个网站的范围是什么样的问题。您的问题非常广泛,您可以考虑发布到DATSICCESS.SE或其他更集中的站点。
 Matrix::substract(Layer_2, desired_output),