0

私のプロジェクトは古代のコインを認識することです。Matlabを使用しています。入力と出力の両方を含む機能ファイルがすでにあります。newffを使って3種類のコインを訓練し、ネットを節約しました。3種類のコインは01、10、11をターゲットにしました。今、私はその訓練されたネットをテストに使用したいと思います。テスト画像もあります。私はこのようにコーディングしました:

load net.mat;
load features.mat;
testInputs = Features';
out = sim(net,testInputs);
[dummy, I]=max(out);

の値はI、コインの種類を確認するために使用しています。1の場合Iは1を入力し、2の場合は2を入力し、3の場合は3を入力します。正しいですか。ターゲットを01、10、11として指定したため、これらの1,2,3値をハードコーディングしました。

if (I == 2)
    fprintf('Type1\n');
elseif (I == 1)
    fprintf('Type2\n');
elseif (I == 3)
    fprintf('Type3\n');
else
    fprintf('undefined\n');
end

今は3種類のテストコイン画像を入力していますが、値は1か2のどちらかですI。ただし、3ではありません。トレーニングに使用されるのと同じ画像のセットを使用している場合でも、値に1または2が与えられますI

手伝ってもらえますか?

4

1 に答える 1

0

max()の2番目の引数は、より高い出力を持つニューロンのインデックスを提供します。ニューロンが2つしかない場合、つまりターゲットが[0,1]、[1,0]、[1,1]の場合(すべてのターゲットに2つの要素しかないことに注意してください)、3を取得する方法はありません。そのmax()から。[0,0,1]、[0,1,0]、[1,0,0]を試してみてください。

ちなみに、ニューロンの活性化関数としてtansigを使用している場合は、ターゲットで0ではなく-1を使用することを検討してください。これにより、非線形性をより有効に活用できます。[-1,-1,1]、[-1,1、-1]、[1、-1、-1]のようなもの。

于 2011-03-18T01:18:05.160 に答える