需要神经网络XOR反向传播信息

时间:2009-05-05 14:37:09

标签: c++ matlab machine-learning neural-network

有谁知道在哪里可以找到关于XOR的NN反向传播的一些示例代码, 我还可以在训练后测试系统吗?

最好用C ++或MATLAB。

3 个答案:

答案 0 :(得分:3)

我推荐John A. Bullinaria的'Step by Step Guide to Implementing a Neural Network in C'

这是如何实现一个能够学习如何XOR的多层神经网络的非常简单的。

本文介绍的代码在C中,很容易理解。网上的大多数“神经网络入门”文章都是基于面向对象的,并且以可重用的库的形式出现,这可能使它们更难被理解并开始使用。

答案 1 :(得分:0)

你已经得到了一些处理C代码的答案,所以这里是an XOR demo for MATLAB。该演示版是针对旧版本的MATLAB(版本6)编写的,需要Neural Network Toolbox,但是仍然希望能够为您提供有关如何实现网络的一些想法。

编辑:有关神经网络工具箱中反向传播算法的更多一般信息,我建议使用online documentation at The MathWorks website

答案 2 :(得分:0)

我写了一个here,我认为这真的很简单。哦,到底是怎么回事。我将在这里重新发布代码。

function layer2 = xornn2(iters)
    if nargin < 1
        iters = 50
    end
    T = [0 1 1 0];
    X = [0 0 1 1; 0 1 0 1; 1 1 1 1];
    m = size(T,2);
    inputsz = size(X,1)-1;
    hiddensz = 3;
    outputsz = size(T,1);
    theta1 = randn(hiddensz, 1+inputsz);
    theta2 = randn(outputsz, 1+hiddensz);
    for i = [1:iters]
        layer1 = [logsig(theta1 * X); ones(1,m)];
        layer2 = logsig(theta2 * layer1);
        delta2 = T - layer2;
        delta1 = layer1 .* (1-layer1) .* (theta2' * delta2);
        % remove the bias from delta 1. There's no real point in a delta on the bias.
        delta1 = delta1(1:(end-1),:);
        theta2d = delta2 * layer1';
        theta1d = delta1 * X';
        theta1 = theta1 + 0.1 * theta1d;
        theta2 = theta2 + 0.1 * theta2d;
    end
end

可以改进随机初始化。 (我将它设为sqrt(6。/(扇形+扇出))...(这是来自Yoshua Bengio的一篇论文..)但是,它基本上有效..例如用xornn(10000)试试。你应该能够将hiddensz改为任何&gt; = 2。