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

Posted

技术标签:

【中文标题】需要神经网络 XOR 反向传播信息【英文标题】:Neural network XOR backpropagation info needed 【发布时间】:2010-10-23 22:25:34 【问题描述】:

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

最好使用 C++ 或 MATLAB。

【问题讨论】:

【参考方案1】:

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

这是关于如何实现能够学习异或的多层神经网络的非常简单的演练。

文中介绍的代码是C语言的,非常容易理解。网络上的大多数“神经网络简介”文章都是基于面向对象的,并且采用可重用库的形式,这可能会使它们更难理解和入门。

【讨论】:

【参考方案2】:

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

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

【讨论】:

很高兴再次收到您的来信,我想知道是否有任何专门用于 backp ropagation 的教程?没有异或.. 是的,刚刚添加了在线文档的链接。 =)【参考方案3】:

我写了一个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./(fanin+fanout))...(来自 Yoshua Bengio 的一篇论文..)但是,它基本上可以工作.. 试试 xornn(10000) 例如。你应该能够将 hiddensz 更改为 >= 2 的任何值。

【讨论】:

以上是关于需要神经网络 XOR 反向传播信息的主要内容,如果未能解决你的问题,请参考以下文章

反向传播和反向模式 autodiff 有啥区别?

Pytorch Note13 反向传播算法

Back Propagation:反向传播

深度学习基础之正向传播与反向传播

八度反向传播实现问题

动手深度学习15-深度学习-正向传播反向传播和计算图