Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6.doc
Скачиваний:
857
Добавлен:
07.03.2016
Размер:
15.55 Mб
Скачать

11.4. Функции инициализации

Функции инициализации выполняют подготовку нейронной сети к инициализации и выполняют саму инициализацию, присваивая начальные значения матрицам весов и векторам смещений.

inIT

Инициализация нейронной сети

Синтаксис:

net = init(net)

Описание:

Функция net = init(net)выполняет инициализацию нейронной сети, используя функцию инициализации, определяемую свойствомnet.initFcn, и значения параметров, определяемые свойствомnet.initParam.

Пример:

Сформировать персептрон с одним нейроном, вход которого имеет 2 элемента со значениями в диапазонах [0 1] и [ –2 2].

net = newp([0 1; –2 2], 1);

net.initFcn

net.layers{1}.initFcn

net.inputWeights{1}.initFcn

net.biases{1}.initFcn

ans = initlay

ans = initwb

ans = initzero

ans = initzero

В результате создания персептрона мы видим, что сеть допускает возможность задавать любые функции инициализации весов и смещений, поскольку в качестве функций готовности выбраны: для сети – функция initlay, для слоя – initwb. В качестве функций инициализации для весов и смещений персептрона используется функция initzero.

Выведем значения установленных весов и смещений:

net.IW{1,1}

net.b{1}

ans = 0 0

ans = 0

Обучим персептрон на следующих обучающих множествах P = [0 1 0 1; 0 0 1 1]:

T = [0 0 0 1];

net = train(net,P,T);

net.IW{1,1}

net.b{1}

ans = 1 2

ans = –3

Это приводит к установлению новых значений весов и смещений.

Для того чтобы возвратиться к начальным значениям весов и смещений, характерных для данной сети, и предназначена функция init:

net = init(net);

net.IW{1,1}

net.b{1}

ans = 0 0

ans = 0

Веса и смещения возвращаются к нулевым значениям, что соответствует свойствам нейронной сети персептрона.

Алгоритм:

Функция init проверяет свойствоnet.initFcn, чтобы инициализировать нужным образом веса и смещения. Обычно свойствоnet.initFcnустанавливается равным 'initlay', что позволяет устанавливать функции инициализации для каждого слоя, используя свойствоnet.layers{i}.initFcn.

В сетях с обратным распространением ошибки свойство net.layers{i}.initFcn устанавливается равным'initnw', что соответствует алгоритму инициализацииNguyen–Widrow.

Для других сетей значение свойства net.layers{i}.initFcnустанавливается равным'initwb', что позволяет устанавливать произвольные функции инициализации для каждого слоя. Наиболее общий тип функции инициализации – это функция rands, которая генерирует случайные значения весов и смещений в диапазоне [–1 1].

Сопутствующие функции: SIM, ADAPT, TRAIN, INITLAY, INITNW, INITWB, RANDS.

inITLAY

Функция готовности сети к инициализации

Синтаксис:

net = initlay(net)

info = initlay(code)

Описание:

Функция net = initlay(net)устанавливает, что в сетиnet для инициализации ее слоев могут быть использованы собственные функции инициализации, определяемые свойствомnet.layers{i}.initFcn.

Функция info = initlay(code)возвращает информацию о параметрах инициализации, соответствующую следующим значениям аргументаcode:

'pnames'– имена параметров инициализации;

'pdefaults'– значения параметров инициализации по умолчанию.

Initlayне имеет параметров инициализации.

Применение функции:

Функция инициализации initlay используется при создании сетей с помощью методовnewp,newlin,newff,newcf, а также при формировании сетей с атрибутами, определяемыми пользователем.

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

  • установить свойство сети net.initFcnравным'initlay'. Это автоматически установит свойствоnet.initParamравным пустой матрице [ ], так как функцияinitlayне имеет параметров инициализации;

  • установить значения свойств net.layers{i}.initFcn, соответствующие выбранным функциям инициализации для слоя, напримерinitwbилиinitnw.

Для того чтобы фактически инициализировать сеть, т. е. присвоить значения матрицам весов и векторам смещений, необходимо применить функцию init.

Алгоритм:

Веса и смещения в каждом слое iсетиnetинициализируются функцией, заданной значением свойстваnet.layers{i}.initFcn.

Сопутствующие функции: initwb, initnw, init.

inITWB

Функция готовности слоя к инициализации

Синтаксис:

net = initwb(net,I)

Описание:

Функция net = initwb(net, I) устанавливает, что в сети net для инициализации слоя I будет использована функция инициализации, определяемая свойством net.layers{i}.initFcn.

Применение функции:

Функция инициализации initwb используется при создании сетей с помощью методовnewp,newlin,newff, а также при формировании сетей с атрибутами, определяемыми пользователем.

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

  • установить свойство сети net.initFcnравным'initlay'. Это автоматически установит свойствоnet.initParamравным пустой матрице [ ], так как функцияinitlayне имеет параметров инициализации;

  • установить значение свойства net.layers{i}.initFcnравным'initwb';

  • установить значения свойств net.inputWeights{i, j}.initFcn, net.layerWeights{i, j}.initFcn, net.biases{i}.initFcn, соответствующие выбранным функциям инициализации, например rands или midpoint.

Для того чтобы фактически инициализировать сеть, т. е. присвоить значения матрицам весов и векторам смещений, необходимо применить функцию init.

Сопутствующие функции: initnw, initlay, init.

inITNW

Функция инициализации слоя по алгоритму NW

Синтаксис:

net = initnw(net,I)

Описание:

Функция net = initnw(net, I)инициализирует веса и смещения слояIсети net, используя алгоритм инициализацииNguyen–Widrow.

Применение функции:

Функция инициализации initnw используется при создании сетей с помощью методов newff, newcf, а также при формировании сетей с атрибутами, определяемыми пользователем.

Для того чтобы подготовить сеть к заданию функции инициализации initnw, необходимо:

  • установить свойство сети net.initFcnравным'initlay'. Это автоматически установит свойствоnet.initParamравным пустой матрице [ ], так как функцияinitlayне имеет параметров инициализации;

  • установить значение свойства net.layers{i}.initFcnравным 'initnw'.

Для того чтобы фактически инициализировать сеть, т. е. присвоить значения матрицам весов и векторам смещений, необходимо применить функцию init.

Алгоритм:

Метод Nguyen–Widrowгенерирует значения начальных весов и смещений так, чтобы активные области слоя нейронов были бы распределены приблизительно равномерно в пространстве входа.

Его преимуществами по сравнению с методом инициализации случайных весов и смещений являются следующие:

  • оптимальное количество используемых нейронов;

  • ускорение процедуры обучения, поскольку активные зоны нейронов соответствуют пространству входа.

Ограничения метода инициализации Nguyen–Widrowсвязаны с тем, что его можно применять только к слоям, имеющим смещения, с функцией взвешиванияdotprodи функцией накопленияnetsum.

Если эти условия не выполняются, то следует использовать метод инициализации rands.

Сопутствующие функции: initwb, initlay, init.

inITZERO

Инициализация нулевых значений весов и смещений

IСинтаксис:

W = initzero(S,PR)

b = initzero(S,[1 1])

Описание:

Функция W = initzero(S, PR)присваивает матрице весов слоя нулевые значения и имеет следующие входные и выходные аргументы.

Входные аргументы:

S – число нейронов в слое;

PR – матрица размера R2, задающая диапазоны изменения элементов входного вектора.

Выходной аргумент:

W – нулевая матрица весов размера SR.

Функция b = initzero(S, [1 1])присваивает вектору смещений слоя нулевые значения и имеет следующие входные и выходные аргументы.

Входной аргумент:

S – число нейронов в слое.

Выходной аргумент:

b – нулевой вектор смещений размера S1.

Пример:

Присвоить нулевые значения матрице весов и вектору смещения для слоя с пятью нейронами и вектором входа, элементы которого принимают значения в диапазонах [0 1], [–2 2].

W = initzero(5, [0 1; –2 2])

b = initzero(5, [1 1])

W =

b =

0 0

0 0

0 0

0 0

0 0

0

0

0

0

0

Применение функции:

Функция инициализации initzero используется при создании сетей с помощью методов newp, newlin, а также при формировании сетей с атрибутами, определяемыми пользователем.

Для того чтобы подготовить сеть к заданию функции инициализации initzero, необходимо:

  • установить свойство сети net.initFcnравным'initlay'. Это автоматически установит свойствоnet.initParamравным пустой матрице [ ], так как функцияinitlayне имеет параметров инициализации;

  • установить значение свойства net.layers{i}.initFcnравным'initwb';

  • установить значения свойств net.inputWeights{i, j}.initFcn, net.layerWeights{i, j}.initFcn, net.biases{i}.initFcn равными initzero.

Для того чтобы фактически инициализировать сеть, т. е. присвоить нулевые значения матрицам весов и векторам смещений, необходимо применить функцию init.

Сопутствующие функции: initwb, initlay, init.

midpoint

Инициализация матрицы средних значений

Синтаксис:

W = midpoint(S,PR)

Описание:

Функция W = midpoint (S, PR)присваивает элементам матрицы весов слоя средние значения элементов вектора входа и имеет следующие входные и выходные аргументы.

Входные аргументы:

S – число нейронов в слое;

PR – матрица размера R2, задающая диапазоны изменения элементов входного вектора[Pmin Pmax].

Выходной аргумент:

W – матрица весов размера SR с элементами столбцов, равными (Pmin+Pmax)/2.

Пример:

Присвоить нулевые значения матрице весов и вектору смещения для слоя с пятью нейронами и вектором входа, элементы которого принимают значения в диапазонах [0 1], [–2 2].

W = midpoint(5,[0 1; –2 2])

W =

5.0000e–001 0

5.0000e–001 0

5.0000e–001 0

5.0000e–001 0

5.0000e–001 0

Применение функции:

Функция инициализации midpointиспользуется при создании сетей с помощью методаnewp, а также при формировании сетей с атрибутами, определяемыми пользователем.

Для того чтобы подготовить сеть к заданию функции инициализации midpoint, необходимо:

  • установить свойство сети net.initFcnравным'initlay'. Это автоматически установит свойствоnet.initParamравным пустой матрице [ ], так как функцияinitlayне имеет параметров инициализации;

  • установить значение свойства net.layers{i}.initFcnравным'initwb';

  • установить значения свойств net.inputWeights{i, j}.initFcn, net.layerWeights{i, j}.initFcn равными midpoint.

Для того чтобы фактически инициализировать сеть, т. е. присвоить нулевые значения матрицам весов и векторам смещений, необходимо применить функцию init.

Сопутствующие функции: INITWB, INITLAY, INIT.

randS

Инициализация случайных весов/смещений

Синтаксис:

W = rands(S,PR)

M = rands(S,R)

v = rands(S)

Описание:

Функции семейства randsпредназначены для инициализации случайных массивов весов и смещений.

Функция W = rands(S, PR) имеет 2 входных аргумента:

S – число нейронов;

PR – массив минимальных и максимальных значений вектора входа размера R2.

Выходом является случайная матрица весов размера SR с элементами из диапазона [–1 1].

Функция M = rands(S, R) использует в качестве второго аргумента параметр R, соответствующий числу элементов вектора входа. Выходом также является случайная матрица весов размера SR с элементами из диапазона [–1 1].

Функция v = rands(S) возвращает случайный вектор размера S1 с элементами из диапазона [–1 1].

Пример:

Сформируем с помощью функции rands различные массивы случайных величин:

W = rands(4,[0 1; –2 2])

M = rands(2,3)

v = rands(4)

W =

0.9003 0.7826

–0.5377 0.5242

0.2137 –0.0871

–0.0280 –0.9630

M =

0.6428 0.2309 0.8436

–0.1106 0.5839 0.4764

v =

–0.6475

–0.1886

0.8709

0.8338

Применение функции:

Для того чтобы подготовить сеть к заданию функции инициализации rands, необходимо:

  • установить свойство сети net.initFcnравным'initlay'. Это автоматически установит свойствоnet.initParamравным пустой матрице [ ], так как функцияinitlayне имеет параметров инициализации;

  • установить значение свойства net.layers{i}.initFcnравным'initwb';

  • установить значения свойств net.inputWeights{i, j}.initFcn, net.layerWeights{i, j}.initFcn равными rands.

Для того чтобы фактически инициализировать сеть, т. е. присвоить случайные значения матрицам весов и векторам смещений, необходимо применить функцию init.

Сопутствующие функции: RANDNR, RANDNC, INITWB, INITLAY, INIT.

randnc

Инициализация случайной матрицы с нормированными столбцами

Синтаксис:

W = randnc(S,PR)

W = randnc(S,R)

Описание:

Функции семейства randncаналогичны функциямrands, но предназначены только для инициализации весов. К ним возможны 2 формы обращения, которые возвращают случайную матрицу весов размера SR с нормированными столбцами.

Пример:

Сформируем случайный массив из четырех нормированных трехэлементных столбцов:

M = randnc(3,4)

M =

–0.6007 –0.4715 –0.2724 0.5596

–0.7628 –0.6967 –0.9172 0.7819

–0.2395 0.5406 –0.2907 0.2747

Сопутствующие функции: randnr, randS.

randnR

Инициализация случайной матрицы с нормированными строками

Синтаксис:

W = randnr(S,PR)

W = randnr(S,R)

Описание:

Функции семейства randnr аналогичны функциям rands, но предназначены только для инициализации весов. К ним возможны 2 формы обращения, которые возвращают случайную матрицу весов размера SR с нормированными строками.

Пример:

Создадим случайную матрицу из трех нормированных четырехэлементных строк:

W = randnr(3,4)

W =

0.9713 0.0800 –0.1838 –0.1282

0.8228 0.0338 0.1797 0.5381

–0.3042 –0.5725 0.5436 0.5331

Сопутствующие функции: randnC, randS.

inITCON

Функция инициализации равных смещений

Синтаксис:

b = initcon(S,PR)

Описание:

Функция initconявляется функцией инициализации смещений, которая инициализирует смещения для сети с функцией настройкиlearncon.

Функция b = initcon(S, PR) присваивает значения вектору смещения и имеет следующие входные и выходные аргументы.

Входные аргументы:

S – число нейронов в слое;

PR – матрица размера R2, задающая диапазоны изменения элементов входного вектора, по умолчанию [1 1]'.

Выходной аргумент:

b– вектор смещений размера S1.

Функция initconможет также быть использована для инициализации весов, но применение ее для этой цели не рекомендуется.

Пример:

Начальные значения смещений рассчитаем для слоя с пятью нейронами:

b = initcon(5)

b’ =

1.3591e+001 1.3591e+001 1.3591e+001 1.3591e+001 1.3591e+001

Применение функции:

Функция инициализации initconиспользуется при создании сетей с помощью методаnewc, а также при формировании сетей с атрибутами, определяемыми пользователем.

Для того чтобы подготовить сеть к заданию функции инициализации midpoint, необходимо:

  • установить свойство сети net.initFcnравным'initlay'. Это автоматически установит свойствоnet.initParamравным пустой матрице [ ], так как функцияinitlayне имеет параметров инициализации;

  • установить значение свойства net.layers{i}.initFcnравным'initwb';

  • установить свойство net.biases{i}.initFcnна'initcon'.

Для того чтобы фактически инициализировать сеть, необходимо применить функцию init.

Алгоритм:

Функция learncon модифицирует смещения так, чтобы значение каждого смещенияb(i) являлось функцией среднего значения выхода для нейрона с номеромi. Начальные значения смещений устанавливаются равными

b(i) = exp(1)S.

Сопутствующие функции: INITWB, INITLAY, INIT, LEARNCON.

REVERT

Возвращение к ранее установленным значениям весов и смещений

Синтаксис:

net = revert(net)

Описание:

Функция net = revert(net) возвращает веса и смещения к значениям, соответствующим последней процедуре инициализации. Если же изменениям подвергались связи между нейронами или изменялось их количество, то функцияrevertне может восстановить прежних значений и присваивает весам и смещениям нулевые значения.

Сопутствующие функции: INIT, SIM, ADAPT, TRAIN.