Matlab - Използвайте обучена мрежа за тестване

Моят проект е да разпознавам древни монети. Използвам Matlab. Вече имам файл с функции, който съдържа както входове, така и изходи. Обучил съм 3 вида монети с помощта на newff и net беше запазен. За трите вида монети използвах 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.

Можете ли да ми помогнете?


person Nadeeshani Jayathilake    schedule 13.03.2011    source източник
comment
Погледнете матрицата на теглата (забравих как да отида до нея) и се уверете, че вашата мрежа не се е установила на локален минимум с нула като тегло за третото.   -  person jonsca    schedule 13.03.2011
comment
Нов съм в matlab. Можете ли да ми обясните малко повече? Не можах да разбера какво казахте по-горе. Когато обучавам своя набор от данни, за 3 вида монети съм дал [0,1], [1,0] и [1,1] като цели. Не мога ли да дам така? След обучение, когато сравня обучените данни с моите тестови изображения, които използвах, out = sim(net,testInputs); [манекен, I]=max(out); и след това if (I == 2) fprintf('Type1\n'); elseif (I == 1) fprintf('Тип2\n'); elseif (I == 3) fprintf('Тип3\n'); else fprintf('недефинирано\n'); край. Това неправилно ли е? Винаги връщам 1 или 2.   -  person Nadeeshani Jayathilake    schedule 13.03.2011
comment
Тегловата матрица съдържа силните страни на връзката между отделните звена. Ако не сте запознати с това, трябва да прочетете документацията на Matlab. След това можете да видите до каква степен въвеждането на третото звено влияе на резултата.   -  person jonsca    schedule 13.03.2011
comment
Вижте Нишка в Matlab и документация. За съжаление времето за редактиране на другия изтече.   -  person jonsca    schedule 13.03.2011
comment
Всичко е наред. И благодаря много. Ще мина.   -  person Nadeeshani Jayathilake    schedule 13.03.2011


Отговори (1)


Вторият аргумент на max() ще ви даде индекса на неврона с по-висок изход. Ако имате само два неврона, какъвто е случаят, ако вашите цели са [0,1], [1,0] и [1,1] (обърнете внимание само на два елемента на всяка цел), няма да има начин да получите 3 от този max(). Трябва да опитате [0,0,1], [0,1,0] и [1,0,0].

Като странична бележка, ако използвате tansig като функция за активиране на невроните, помислете дали да не използвате -1 вместо 0 за целите, така че да можете по-добре да използвате нелинейността. Нещо като [-1,-1,1], [-1,1,-1], [1,-1,-1].

person FelipeFG    schedule 18.03.2011