Почему моя нейронная сеть с радиальным нейроном не тренируется?

Спокойной ночи всем,

Я хочу подогнать кривую (y=exp(-(x-30).^2)) изображения в гиперссылке ниже, используя нейронную сеть в matlab. Для этого я хочу использовать сеть feedfoward с радиальным базисным нейроном.

образ

Я написал код, но он не работает, и я не могу понять, почему.

x=[10:0.1:40];
y=exp(-(x-30).^2);

plot(x,y)

nN=[1];

net = feedforwardnet(nN,'traingd');
net.trainParam.epochs=50000;

net.trainParam.lr = 0.01;
net.trainParam.min_grad=0;
net.trainParam.max_fail=15;


net.divideParam.trainRatio = 60/100;
net.divideParam.valRatio = 20/100;
net.divideParam.testRatio = 20/100;


net.layers{1}.transferFcn = 'radbas';
net.layers{2}.transferFcn = 'purelin';



net = configure(net, x, y);

net.iw{1,1}=30;

net.biasConnect=[1; 1];
net.inputConnect=[1; 0];
net.layerConnect=[0 0;1 0];
net.outputConnect=[0 1];


net.inputWeights{1,1}.weightFcn='dist';
net.layers{1}.netInputFcn='netprod';


net.inputWeights{1,1}.learnFcn='learngd';
net.layerWeights{2,1}.learnFcn='learngd';
net.biases{:}.learnFcn='learngd';


[net,tr] = train(net,x,y);
yFinal = net(x);

plot(x,y,'.',x,yFinal,'o')

Я использую обратное распространение для обучения нейронной сети. Я использовал один скрытый слой с одним нейроном с передаточной функцией, равной радбасу, и с распределенной весовой функцией. Выходной слой имеет один нейрон с передаточной функцией, равной pureline, а весовой функцией является dotprod. Когда я использую dotprod, как весовая функция ввода нейрона в скрытом слое, сеть тренируется правильно. (Изображение 2)

изображение 2

Но мне нужно использовать "dist", и когда я использую dist как функцию веса, нейронная сеть не учится (рисунок 3). Если вы введете "help nnweight", вы увидите, что "dist" является одной из возможных весовых функций. Я не могу понять, почему это не работает.

изображение 3

Кто-нибудь может, пожалуйста, помочь мне? Огромное спасибо.

0 ответов

Другие вопросы по тегам