99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁(yè)精彩閱讀簡(jiǎn)單易學(xué)的機(jī)器學(xué)習(xí)算法—神經(jīng)網(wǎng)絡(luò)之BP神經(jīng)網(wǎng)絡(luò)
簡(jiǎn)單易學(xué)的機(jī)器學(xué)習(xí)算法—神經(jīng)網(wǎng)絡(luò)之BP神經(jīng)網(wǎng)絡(luò)
2017-03-22
收藏

簡(jiǎn)單易學(xué)的機(jī)器學(xué)習(xí)算法—神經(jīng)網(wǎng)絡(luò)之BP神經(jīng)網(wǎng)絡(luò)

一、BP神經(jīng)網(wǎng)絡(luò)的概念
    BP神經(jīng)網(wǎng)絡(luò)是一種多層的前饋神經(jīng)網(wǎng)絡(luò),其主要的特點(diǎn)是:信號(hào)是前向傳播的,而誤差是反向傳播的。具體來(lái)說(shuō),對(duì)于如下的只含一個(gè)隱層的神經(jīng)網(wǎng)絡(luò)模型:

(三層BP神經(jīng)網(wǎng)絡(luò)模型)
BP神經(jīng)網(wǎng)絡(luò)的過(guò)程主要分為兩個(gè)階段,第一階段是信號(hào)的前向傳播,從輸入層經(jīng)過(guò)隱含層,最后到達(dá)輸出層;第二階段是誤差的反向傳播,從輸出層到隱含層,最后到輸入層,依次調(diào)節(jié)隱含層到輸出層的權(quán)重和偏置,輸入層到隱含層的權(quán)重和偏置。
二、BP神經(jīng)網(wǎng)絡(luò)的流程
    在知道了BP神經(jīng)網(wǎng)絡(luò)的特點(diǎn)后,我們需要依據(jù)信號(hào)的前向傳播和誤差的反向傳播來(lái)構(gòu)建整個(gè)網(wǎng)絡(luò)。
1、網(wǎng)絡(luò)的初始化
    假設(shè)輸入層的節(jié)點(diǎn)個(gè)數(shù)為n,隱含層的節(jié)點(diǎn)個(gè)數(shù)為,輸出層的節(jié)點(diǎn)個(gè)數(shù)為m。輸入層到隱含層的權(quán)重,隱含層到輸出層的權(quán)重為wjk,輸入層到隱含層的偏置為aj,隱含層到輸出層的偏置為bk。學(xué)習(xí)速率為,激勵(lì)函數(shù)為。其中激勵(lì)函數(shù)為取Sigmoid函數(shù)。形式為:
2、隱含層的輸出
    如上面的三層BP網(wǎng)絡(luò)所示,隱含層的輸出

3、輸出層的輸出

4、誤差的計(jì)算
    我們?nèi)≌`差公式為:

其中為期望輸出。我們記,則可以表示為

以上公式中
5、權(quán)值的更新
    權(quán)值的更新公式為:

這里需要解釋一下公式的由來(lái):
這是誤差反向傳播的過(guò)程,我們的目標(biāo)是使得誤差函數(shù)達(dá)到最小值,即,我們使用梯度下降法
隱含層到輸出層的權(quán)重更新

則權(quán)重的更新公式為:

輸入層到隱含層的權(quán)重更新

其中

則權(quán)重的更新公式為:

6、偏置的更新
    偏置的更新公式為:

隱含層到輸出層的偏置更新

則偏置的更新公式為:
輸入層到隱含層的偏置更新

其中

則偏置的更新公式為:

7、判斷算法迭代是否結(jié)束
    有很多的方法可以判斷算法是否已經(jīng)收斂,常見(jiàn)的有指定迭代的代數(shù),判斷相鄰的兩次誤差之間的差別是否小于指定的值等等。
三、實(shí)驗(yàn)的仿真
    在本試驗(yàn)中,我們利用BP神經(jīng)網(wǎng)絡(luò)處理一個(gè)四分類問(wèn)題,最終的分類結(jié)果為:

MATLAB代碼
主程序
[plain] view plain copy 在CODE上查看代碼片派生到我的代碼片
%% BP的主函數(shù)  
 
% 清空  
clear all;  
clc;  
 
% 導(dǎo)入數(shù)據(jù)  
load data;  
 
%從1到2000間隨機(jī)排序  
k=rand(1,2000);  
[m,n]=sort(k);  
 
%輸入輸出數(shù)據(jù)  
input=data(:,2:25);  
output1 =data(:,1);  
 
%把輸出從1維變成4維  
for i=1:2000  
    switch output1(i)  
        case 1  
            output(i,:)=[1 0 0 0];  
        case 2  
            output(i,:)=[0 1 0 0];  
        case 3  
            output(i,:)=[0 0 1 0];  
        case 4  
            output(i,:)=[0 0 0 1];  
    end  
end  
 
%隨機(jī)提取1500個(gè)樣本為訓(xùn)練樣本,500個(gè)樣本為預(yù)測(cè)樣本  
trainCharacter=input(n(1:1600),:);  
trainOutput=output(n(1:1600),:);  
testCharacter=input(n(1601:2000),:);  
testOutput=output(n(1601:2000),:);  
 
% 對(duì)訓(xùn)練的特征進(jìn)行歸一化  
[trainInput,inputps]=mapminmax(trainCharacter');  
 
%% 參數(shù)的初始化  
 
% 參數(shù)的初始化  
inputNum = 24;%輸入層的節(jié)點(diǎn)數(shù)  
hiddenNum = 50;%隱含層的節(jié)點(diǎn)數(shù)  
outputNum = 4;%輸出層的節(jié)點(diǎn)數(shù)  
 
% 權(quán)重和偏置的初始化  
w1 = rands(inputNum,hiddenNum);  
b1 = rands(hiddenNum,1);  
w2 = rands(hiddenNum,outputNum);  
b2 = rands(outputNum,1);  
 
% 學(xué)習(xí)率  
yita = 0.1;  
 
%% 網(wǎng)絡(luò)的訓(xùn)練  
for r = 1:30  
    E(r) = 0;% 統(tǒng)計(jì)誤差  
    for m = 1:1600  
        % 信息的正向流動(dòng)  
        x = trainInput(:,m);  
        % 隱含層的輸出  
        for j = 1:hiddenNum  
            hidden(j,:) = w1(:,j)'*x+b1(j,:);  
            hiddenOutput(j,:) = g(hidden(j,:));  
        end  
        % 輸出層的輸出  
        outputOutput = w2'*hiddenOutput+b2;  
          
        % 計(jì)算誤差  
        e = trainOutput(m,:)'-outputOutput;  
        E(r) = E(r) + sum(abs(e));  
          
        % 修改權(quán)重和偏置  
        % 隱含層到輸出層的權(quán)重和偏置調(diào)整  
        dw2 = hiddenOutput*e';  
        db2 = e;  
          
        % 輸入層到隱含層的權(quán)重和偏置調(diào)整  
        for j = 1:hiddenNum  
            partOne(j) = hiddenOutput(j)*(1-hiddenOutput(j));  
            partTwo(j) = w2(j,:)*e;  
        end  
          
        for i = 1:inputNum  
            for j = 1:hiddenNum  
                dw1(i,j) = partOne(j)*x(i,:)*partTwo(j);  
                db1(j,:) = partOne(j)*partTwo(j);  
            end  
        end  
          
        w1 = w1 + yita*dw1;  
        w2 = w2 + yita*dw2;  
        b1 = b1 + yita*db1;  
        b2 = b2 + yita*db2;    
    end  
end  
 
%% 語(yǔ)音特征信號(hào)分類  
testInput=mapminmax('apply',testCharacter',inputps);  
 
for m = 1:400  
    for j = 1:hiddenNum  
        hiddenTest(j,:) = w1(:,j)'*testInput(:,m)+b1(j,:);  
        hiddenTestOutput(j,:) = g(hiddenTest(j,:));  
    end  
    outputOfTest(:,m) = w2'*hiddenTestOutput+b2;  
end  
 
%% 結(jié)果分析  
%根據(jù)網(wǎng)絡(luò)輸出找出數(shù)據(jù)屬于哪類  
for m=1:400  
    output_fore(m)=find(outputOfTest(:,m)==max(outputOfTest(:,m)));  
end  
 
%BP網(wǎng)絡(luò)預(yù)測(cè)誤差  
error=output_fore-output1(n(1601:2000))';  
 
k=zeros(1,4);    
%找出判斷錯(cuò)誤的分類屬于哪一類  
for i=1:400  
    if error(i)~=0  
        [b,c]=max(testOutput(i,:));  
        switch c  
            case 1   
                k(1)=k(1)+1;  
            case 2   
                k(2)=k(2)+1;  
            case 3   
                k(3)=k(3)+1;  
            case 4   
                k(4)=k(4)+1;  
        end  
    end  
end  
 
%找出每類的個(gè)體和  
kk=zeros(1,4);  
for i=1:400  
    [b,c]=max(testOutput(i,:));  
    switch c  
        case 1  
            kk(1)=kk(1)+1;  
        case 2  
            kk(2)=kk(2)+1;  
        case 3  
            kk(3)=kk(3)+1;  
        case 4  
            kk(4)=kk(4)+1;  
    end  
end  
 
%正確率  
rightridio=(kk-k)./kk  

激活函數(shù)
[plain] view plain copy 在CODE上查看代碼片派生到我的代碼片
%% 激活函數(shù)  數(shù)據(jù)分析師培訓(xùn)
function [ y ] = g( x )  
    y = 1./(1+exp(-x));  
end 

數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說(shuō)明請(qǐng)參見(jiàn):http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }