1. 程式人生 > >基於遺傳演算法的BP神經網路優化演算法

基於遺傳演算法的BP神經網路優化演算法

遺傳演算法優化BP神經網路分為BP神經網路結構確定、遺傳演算法優化和 BP神經網路預測3個部分。其中,BP神經網路結構確定部分根據擬合函式輸入輸出引數個數確定 BP神經網路結構,這樣就可以確定遺傳演算法的優化引數個數,進而確定遺傳演算法個體的編碼長度。因為遺傳演算法優化的引數是 BP神經網路的初始權值和閾值,只要網路的結構已知,權值和閾值的個數就已知了。種群中的每個個體都包含了一個網路所有權值和閾值,個體通過適應度函式計算個體適應度值,遺傳演算法通過選擇、交叉和變異操作找到最優適應度值對應的個體。BP神經網路預測用遺傳演算法得到最優個體對網路進行初始權值和閾值的賦值,網路經訓練後預測樣本輸出。神經網路的權值和閾值一般是通過初始化為【-0.5,0.5】區間的隨機數,這個初始化引數對網路訓練的影響很大,但是又無法準確獲得,對於相同的初始權重值和閾值,網路的訓練結果是一樣的,引入遺傳演算法就是為了優化出最優的初始權值和閾值。

遺傳演算法優化BP神經網路的演算法流程如下:

這裡寫圖片描述

遺傳演算法的基本要素包括染色體編碼方法、適應度函式、遺傳操作和執行引數。其中染色體編碼方法是指個體的編碼方法,目前包括二進位制法、實數法等。二進位制法是指把個體編碼成為一個二進位制串,實數法是指把個體編碼成為一個實數串。適應度函式是指根據進化目標編寫的計算個體適應度值的函式,通過適應度函式計算每個個體的適應度值,提供給選擇運算元進行選擇。遺傳操作是指選擇操作、交叉操作和變異操作。執行引數是遺傳演算法在初始化時確定的引數,主要包括群體大小 M,遺傳代數G,交叉概率Pc和變異概率Pm。(下面都是引用的MATLAB智慧演算法30個案例裡面的內容,太多了,偷了個懶)

這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

下面是函式實現的程式碼部分:
clc
clear all
close all
%% 載入神經網路的訓練樣本 測試樣本每列一個樣本 輸入P 輸出T,T是標籤
%樣本資料就是前面問題描述中列出的資料
%epochs是計算時根據輸出誤差返回調整神經元權值和閥值的次數
load data
% 初始隱層神經元個數
hiddennum=31;
% 輸入向量的最大值和最小值
threshold=[0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1];
inputnum=size(P,1); % 輸入層神經元個數
outputnum=size(T,1); % 輸出層神經元個數
w1num=inputnum*hiddennum; % 輸入層到隱層的權值個數
w2num=outputnum*hiddennum;% 隱層到輸出層的權值個數
N=w1num+hiddennum+w2num+outputnum; %待優化的變數的個數

%% 定義遺傳演算法引數
NIND=40; %個體數目
MAXGEN=50; %最大遺傳代數
PRECI=10; %變數的二進位制位數
GGAP=0.95; %代溝
px=0.7; %交叉概率
pm=0.01; %變異概率
trace=zeros(N+1,MAXGEN); %尋優結果的初始值

FieldD=[repmat(PRECI,1,N);repmat([-0.5;0.5],1,N);repmat([1;0;1;1],1,N)]; %區域描述器
Chrom=crtbp(NIND,PRECI*N); %初始種群
%% 優化
gen=0; %代計數器
X=bs2rv(Chrom,FieldD); %計算初始種群的十進位制轉換
ObjV=Objfun(X,P,T,hiddennum,P_test,T_test); %計算目標函式值
while gen