Matlab - использовать обученную сеть для тестирования - PullRequest
0 голосов
/ 13 марта 2011

Мой проект - распознавать древние монеты.Я использую Matlab.У меня уже есть файл функций, который содержит как входы, так и выход.Я обучил 3 вида монет, используя newff, и сеть была сохранена.Для трех типов монет я использовал 01, 10 и 11 в качестве целей.Теперь я хочу использовать эту обученную сеть для тестирования.У меня тоже есть тестовые изображения.Я кодировал так:

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

Значение I используется для проверки типа монеты.Если I равно 1, то введите 1, если 2, то введите 2, а если 3, введите 3. Я прав?Я жестко закодировал эти 1,2,3 значения, потому что я поставил цели как 01, 10 и 11.

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.

Можете ли вы мне помочь?

1 Ответ

0 голосов
/ 18 марта 2011

Второй аргумент max () даст вам индекс нейрона с более высоким выходом.Если у вас есть только два нейрона, что имеет место, если ваши цели [0,1], [1,0] и [1,1] (отметьте только два элемента на каждой цели), не будет никакого способа получить 3из этого максимума ().Вы должны попробовать [0,0,1], [0,1,0] и [1,0,0].

С другой стороны, если вы используете Tansig в ​​качестве функции активации нейроноврассмотрите возможность использования -1 вместо 0 на целях, чтобы вы могли лучше использовать нелинейность.Что-то вроде [-1, -1,1], [-1,1, -1], [1, -1, -1].

...