用BP神經網路逼近正弦函式

2021-08-16 14:51:33 字數 2251 閱讀 2609

網路中設定輸入層與輸出層均為乙個神經元,並且考慮到正弦函式的值域分布情況,我這一次在輸出層中的啟用函式並沒有使用以前常用的sigmod函式,而是採用了線性函式y = x 

具體實現**如下所示

clc,clear

data = -3:0.01:3;

xsize = size(data);

datasize = xsize(2);

value = zeros(1,datasize);

for i = 1:datasize

value(i) = sin(data(i));

endhidesize = 10;

w1 = rand(hidesize,1);%輸入層與隱含層之間的權重

b1 = rand(hidesize,1);%隱含層神經元的閾值

w2 = rand(1,hidesize);%隱含層與輸出層之間的權重

b2 = rand(1,1);%輸入層神經元的閾值

yita = 0.005;

loop = 5000;

e = zeros(1,loop);%誤差隨迭代次數的變化

y = zeros(1,datasize);%模型輸出的結果

for loopi = 1:loop

tempsume = 0;

for i = 1:datasize

x = data(i);%輸入層輸入資料

hidein = x*w1-b1;%隱含層的輸入資料

hideout = zeros(hidesize,1);%隱含層的輸出資料

for j = 1:hidesize

hideout(j) = sigmod(hidein(j));

endy = w2*hideout-b2;%輸出

y(i) = y;

e = y-value(i);%誤差

%反饋,修改引數

db2 = -1*yita*e;

dw2 = e*yita*hideout';

db1 = zeros(hidesize,1);

for j = 1:hidesize

db1(j) = w2(j)*sigmod(hidein(j))*(1-sigmod(hidein(j)))*(-1)*e*yita;

enddw1 = zeros(hidesize,1);

for j = 1:hidesize

dw1(j) = w2(j)*sigmod(hidein(j))*(1-sigmod(hidein(j)))*x*e*yita;

endw1 = w1-dw1;

b1 = b1-db1;

w2 = w2-dw2;

b2 = b2-db2;

tempsume = tempsume + abs(e);

ende(loopi) = tempsume;

if mod(loopi,100)==0

loopi

endend

當迭代次數為500次時,逼近效果如下所示

而當迭代次數為5000次時的逼近效果如下圖所示,我們可以看到此時的效果已經很好了。

而總誤差隨迭代次數的變化曲線則如下圖所示

--------------------------------------補充----------------------------------------------

有些同志說matlab提示沒有sigmod函式。這個sigmod函式其實就是那個常用的啟用函式

在matlab中建乙個這樣的函式就可以了

function [ y ] = sigmod( x )

% 啟用函式sigmod,用於神經網路

y = 1/(1+exp(-x));

end

BP神經網路的函式逼近

給出乙個非線性的函式,建立bp神經網路進行擬合影象,其中隱藏神經元的數目為,可以設定。bp神經網路的函式逼近k 2 x 1 05 8 f 1 sin k pi 2 x 建立bp神經網路結構 隱藏層為5 未訓練引數 n 10 net newff minmax x n,1 trainlm y1 sim ...

利用BP神經網路逼近函式 Python實現

文章主要參考原文是matlab版本的實現。在此基礎上,利用python實現bp網路對函式 如下 相應部分都有注釋 2018.08.15 啟用函式用的是sigmoid import numpy as np import math import matplotlib.pyplot as plt x np...

用BP網路完成函式的逼近

用bp網路完成函式的逼近 此處主要為了演示效果,其中部分函式已經廢棄。具體如下 用bp網路完成函式的逼近 clf reset figure 1 p 1 1 1 t 為目標向量 t 0 0.314 6.28 t sin t plot p,t,title 訓練向量 xlabel 輸入向量 p ylabe...