Не е чудно, че всяка от отделните мрежи дава по-добра производителност на съответния тренировъчен набор, върху който е била обучена. Но тези стойности на грешка при прогнозиране са подвеждащи, тъй като е неправилно поставен проблем да се минимизира грешката в набор за обучение. Вашата крайна цел е да увеличите максимално производителността на обобщаване на вашия модел, така че той да се представя добре на нови данни, които не е виждал по време на обучението. Представете си мрежа, която просто запаметява всеки от знаците и по този начин функционира по-скоро като хеш-таблица. Такава мрежа би довела до 0 грешки в данните за обучение, но би се представила зле при други данни.
Един от начините за измерване на ефективността на обобщаването е да извлечете част (напр. 10%) от вашите налични данни и да ги използвате като тестова група. Не използвате този тестов комплект по време на тренировка, а само за измерване.
Освен това трябва да проверите топологията на вашата мрежа. Колко скрити слоя и колко неврона на скрит слой използвате? Уверете се, че вашата топология е достатъчно голяма, за да може да се справи със сложността на вашия проблем.
Разгледайте и други техники за подобряване на производителността на обобщаване на вашата мрежа, като L1 регулация (изваждане на малко фиксирано количество от абсолютната стойност на вашите тежести след всяка тренировъчна стъпка), L2 регулация< /em> (изваждане на малък процент от вашите тежести след всяка тренировъчна стъпка) или Отпадане (произволно обръщане изключване на скрити единици по време на тренировка и намаляване наполовина на вектора на теглото веднага щом тренировката приключи). Освен това трябва да обмислите по-ефективни алгоритми за обучение като RPROP- или RMSProp вместо обикновено обратно разпространение (вижте курса по невронни мрежи на Джефри Хинтън). Трябва също така да вземете предвид набора от данни на MNIST, съдържащ писмени числа 0-9, за тестване на вашата настройка (би трябвало лесно да постигнете по-малко от 300 грешни класификации в тестовия набор).
За да отговорите на първоначалния си въпрос как да пропуснете определени изходни неврони, можете да създадете собствен модул на слоя. Разгледайте SoftmaxLayer, но преди да приложите функцията за активиране на softmax, задайте всички изходни неврони на 0, които принадлежат към класовете, които искате да пропуснете. Трябва да манипулирате променливата outbuf
в _forwardImplementation
. Ако искате да използвате това по време на обучение, уверете се, че сте задали сигнала за грешка на нула за тези класове, преди да прехвърлите обратно грешката към предишния слой (чрез манипулиране на _backwardImplementation
). Това може да бъде полезно напр. ако имате непълни данни и не искате да изхвърлите всяка проба, съдържаща само една NaN стойност. Но във вашия случай всъщност нямате нужда от това.
person
schreon
schedule
23.03.2013