有谁知道我在哪里可以找到一些关于 NN 反向传播的示例代码XOR
,我也可以在系统训练后对其进行测试?
最好在 C++ 或 MATLAB 中。
有谁知道我在哪里可以找到一些关于 NN 反向传播的示例代码XOR
,我也可以在系统训练后对其进行测试?
最好在 C++ 或 MATLAB 中。
我推荐John A. Bullinaria的“用 C 语言实现神经网络的分步指南” 。
这是关于如何实现能够学习异或的多层神经网络的非常简单的演练。
文中介绍的代码是C语言的,非常容易理解。网络上的大多数“神经网络简介”文章都是基于面向对象的,并且以可重用库的形式出现,这可能会使它们更难理解和入门。
您已经得到了一些处理 C 代码的答案,所以这里有一个 MATLAB 的 XOR 演示。该演示是为旧版本的 MATLAB(第 6 版)编写的,需要神经网络工具箱,但希望仍能为您提供有关如何实现网络的一些想法。
编辑:有关神经网络工具箱中反向传播算法的更多一般信息,我建议在 MathWorks 网站上查看在线文档。
我在这里写了一篇,我觉得真的很简单。哦,什么鬼。我将在这里重新发布代码。
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 的任何值。