Инициализация сети

После того как сформирована архитектура сети, должны быть заданы начальные
значения весов и смещений, или, иными словами, сеть должна быть инициализирована. Такая процедура выполняется с помощью метода init для объектов класса network. Оператор вызова этого метода имеет вид:

net = init(net);

Способ инициализации зависит от выбора параметров сети net.initFcn и net.layers{i}.initFcn, которые устанавливают ту или иную функцию инициализации. Параметр net.initFcn
задает функцию инициализации для всей сети. Для сетей с прямой передачей сигнала по умол­чанию используется функция инициализации initlay, которая разрешает для каждого слоя сети использовать собственную функцию инициализации, определяемую свойством net.layers{i}.initFcn.

Для сетей с прямой передачей сигнала обычно применяется одна из двух функций инициализации слоя: initwb или initnw.

Функция initwb позволяет использовать собственные функции инициализации для каждой матрицы весов входа и вектора смещений, задавая параметры net.inputWeights{i, j}.initFcn
и net.biases{i}.initFcn. Для сетей без обратных связей с линейными функциями активации веса обычно инициализируются случайными значениями из интервала [–1 1].

Функция initnw применяется для слоев, использующих сигмоидальные функции активации. Она генерирует начальные веса и смещения для слоя так, чтобы активные области нейронов были распределены равномерно относительно области значений входа. Это имеет несколько преимуществ по сравнению со случайным распределением весов и смещений: во-первых, избыток нейронов минимален, поскольку активные области всех нейронов соответствуют области значений входа, во-вторых, обучение выполняется быстрее, так как для каждой области значений входа найдутся нейроны с той же областью определения аргумента.

В рассмотренном выше примере создания сети с прямой передачей сигнала метод init вызывается автоматически при обращении к М-функции newff. Поэтому инициализация сети выполняется по умолчанию. Если же пользователь хочет применить специальный метод инициализации или принудительно установить значения весов и смещений, то он может непосредственно обратиться к функции init.

Например, если мы хотим заново инициализировать веса и смещения в первом слое, используя функцию rands, то надо ввести следующую последовательность операторов:

net.layers{1}.initFcn = 'initwb';

net.inputWeights{1,1}.initFcn = 'rands';

net.biases{1,1}.initFcn = 'rands';

net.biases{2,1}.initFcn = 'rands';

net = init(net);


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: