の NN バックプロパゲーションに関するサンプル コードがどこにあるのか、XOR
トレーニング後にシステムをテストできることを知っている人はいますか?
できれば C++ または MATLAB で。
の NN バックプロパゲーションに関するサンプル コードがどこにあるのか、XOR
トレーニング後にシステムをテストできることを知っている人はいますか?
できれば C++ または MATLAB で。
John A. Bullinaria による「C でニューラル ネットワークを実装するためのステップ バイ ステップ ガイド」をお勧めします。
これは、XOR の方法を学習できる多層ニューラル ネットワークを実装する方法についての非常に簡単な説明です。
記事で紹介したコードはCで書かれており、非常に分かりやすいです。Web 上の「ニューラル ネットワークの紹介」記事のほとんどは、オブジェクト指向ベースであり、再利用可能なライブラリの形式で提供されているため、理解して使い始めるのが難しくなる可能性があります。
C コードを扱ういくつかの回答を得たので、MATLAB の XOR デモを次に示します。このデモは MATLAB の古いバージョン (ver. 6) 用に書かれており、Neural Network Toolboxが必要ですが、ネットワークの実装方法についていくつかのアイデアが得られることを願っています。
編集: Neural Network Toolbox のバックプロパゲーション アルゴリズムの一般的な情報については、MathWorks Web サイト のオンライン ドキュメントをお勧めします。
ここに1 つ書きましたが、これは本当に簡単だと思います。なんてこった。ここにコードを再投稿します。
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 に変更できます。