Этот пример использует функцию NEWRB, чтобы создать радиальную сеть базиса, которая аппроксимирует функцию, заданную набором точек данных.
Задайте 21 вход P и связанные с ним цели T.
X = -1:.1:1; T = [-.9602 -.5770 -.0729 .3771 .6405 .6600 .4609 ... .1336 -.2013 -.4344 -.5000 -.3930 -.1647 .0988 ... .3072 .3960 .3449 .1816 -.0312 -.2189 -.3201]; plot(X,T,'+'); title('Training Vectors'); xlabel('Input Vector P'); ylabel('Target Vector T');
Мы хотели бы найти функцию, которая соответствует 21 точке данных. Один из способов сделать это - с радиальной сетью базиса. Радиальная сеть базиса является сетью с двумя слоями. Скрытый слой радиальных базисных нейронов и выходной слой линейных нейронов. Вот радиальная передаточная функция базиса, используемая скрытым слоем.
x = -3:.1:3; a = radbas(x); plot(x,a) title('Radial Basis Transfer Function'); xlabel('Input p'); ylabel('Output a');
Веса и смещения каждого нейрона в скрытом слое определяют положение и ширину функции радиального базиса. Каждый линейный выходной нейрон образует взвешенную сумму этих радиальных базисных функций. При правильных значениях веса и смещения для каждого слоя и достаточном количестве скрытых нейронов радиальная сеть базиса может соответствовать любой функции с любой желаемой точностью. Это пример трех радиальных базисных функций (в синем цвете) масштабируются и суммируются, чтобы получить функцию (в пурпурном цвете).
a2 = radbas(x-1.5); a3 = radbas(x+2); a4 = a + a2*1 + a3*0.5; plot(x,a,'b-',x,a2,'b--',x,a3,'b--',x,a4,'m-') title('Weighted Sum of Radial Basis Transfer Functions'); xlabel('Input p'); ylabel('Output a');
Функция NEWRB быстро создает радиальную сеть базиса, которая аппроксимирует функцию, заданную P и T. В дополнение к набору обучающих данных и целям, NEWRB принимает два аргумента, суммарно квадратную цель ошибки и константу расширения.
eg = 0.02; % sum-squared error goal sc = 1; % spread constant net = newrb(X,T,eg,sc);
NEWRB, neurons = 0, MSE = 0.176192
Чтобы увидеть, как работает сеть, реплицируйте набор обучающих данных. Затем моделируйте сетевую характеристику для входов в той же области значений. Наконец, постройте график результатов на том же графике.
plot(X,T,'+'); xlabel('Input'); X = -1:.01:1; Y = net(X); hold on; plot(X,Y); hold off; legend({'Target','Output'})