Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Artificial intelligence sigmoid感知器手写识别的学习算法_Artificial Intelligence_Perceptron_Handwriting - Fatal编程技术网

Artificial intelligence sigmoid感知器手写识别的学习算法

Artificial intelligence sigmoid感知器手写识别的学习算法,artificial-intelligence,perceptron,handwriting,Artificial Intelligence,Perceptron,Handwriting,我正在尝试使用Java中的MNIST数据库,使用单层感知器进行手写识别。每个感知器被分配识别一个数字(因此10个感知器)。他们每个人都随机接受了50000个样本中的每个样本的训练,每个样本都有几个时代。测试时,选择速率最高的感知器(即最有信心正确的感知器) 使用此方法,我始终获得93.5%的准确率。然而,我认为为了改进,我需要添加隐藏层,并实现反向传播。当使用Sigmoid(squashing)函数计算单层网络的前向传递时,它工作得非常好。然而,当我改变我的向后传球(学习)功能以匹配向后传球时,

我正在尝试使用Java中的MNIST数据库,使用单层感知器进行手写识别。每个感知器被分配识别一个数字(因此10个感知器)。他们每个人都随机接受了50000个样本中的每个样本的训练,每个样本都有几个时代。测试时,选择速率最高的感知器(即最有信心正确的感知器)

使用此方法,我始终获得93.5%的准确率。然而,我认为为了改进,我需要添加隐藏层,并实现反向传播。当使用Sigmoid(squashing)函数计算单层网络的前向传递时,它工作得非常好。然而,当我改变我的向后传球(学习)功能以匹配向后传球时,我获得了约70%的准确率。有人能检查一下我的算法以确保这是正确的吗

我从几个地方得到了算法,我认为是一样的。例如,这个:

注意,我将最后一个重量视为偏差。输入学习函数的“错误”只是期望结果减去实际结果。示例是与输入相同的数组-数字中每个像素的灰度

Forward pass:
public final double apply( double[] input ) {
    double ret = 0;
    for (int i=0; i<wei.length-1; i++){
        ret = ret + input[i]*wei[i];
    }
    ret+=wei[wei.length-1];

    //apply squashing function
    ret = 1/(1+Math.exp(-ret));
    return ret;
}


Learning Function (backwards Pass)
public final void learn( double error, double result, double[] example, double alpha ) {
    for (int i=0; i<wei.length-1; i++){
        //wei[i] = wei[i] + alpha*error*example[i]; //This was original learning function - it gives 93.5% accuracy
        wei[i]=wei[i]+ alpha* error * example[i]*result*(1-result); //This line gives ~70% accuracy
    }
    //wei[wei.length-1] += alpha*error; //this line works for bias
    wei[wei.length-1]=wei[wei.length-1]+ alpha* error * 1*result*(1-result); //again, this makes results inaccurate

}
向前传球:
公共最终双应用(双[]输入){
双ret=0;

对于(int i=0;i我今天上午在这里得到了关于算法和实现的最好解释。它用C#解释了用于字符识别的感知器源代码