Matlab中newff函数使用方法和搭建BP神经网络的方法
生活随笔
收集整理的這篇文章主要介紹了
Matlab中newff函数使用方法和搭建BP神经网络的方法
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1. newff()函數(shù)使用方法
net = newff(data,label,[8,8],{'tansig','purelin'},'trainlm')(1)輸入?yún)?shù)詳細(xì)介紹:
- data:訓(xùn)練時(shí)網(wǎng)絡(luò)的輸入數(shù)據(jù)。newff函數(shù)會(huì)把data的一列當(dāng)作一個(gè)樣本,如果你的數(shù)據(jù)集是一行當(dāng)作一個(gè)樣本,記得將你的輸入數(shù)據(jù)矩陣轉(zhuǎn)置data.‘
- label:對(duì)應(yīng)輸入數(shù)據(jù)的標(biāo)簽,也可以看作真實(shí)輸出。同上,newff函數(shù)會(huì)把label的一列當(dāng)作一個(gè)樣本的標(biāo)簽,如果你的數(shù)據(jù)集是一行當(dāng)作一個(gè)樣本,記得將你的輸入數(shù)據(jù)矩陣轉(zhuǎn)置label.‘
- [8,8]:用于確定神經(jīng)網(wǎng)絡(luò)隱藏層的層數(shù)以及每層的神經(jīng)單元個(gè)數(shù)。[8,8]就表示該網(wǎng)絡(luò)包含兩個(gè)隱藏層,每個(gè)隱藏層有8個(gè)神經(jīng)單元
- {‘tansig’,‘purelin’}:表示個(gè)隱藏層所用的激活函數(shù)。{‘tansig’,‘purelin’}表示第一層用tansig激活函數(shù),是一種S型激活函數(shù);第二次用purelin激活函數(shù),是一種線性型激活函數(shù)。常見的激活函數(shù)如下:
- ‘trainlm’:確定訓(xùn)練函數(shù),默認(rèn)為trainlm函數(shù),該方法需要占用更大的存儲(chǔ)空間,使用了Levenberg-Marquardt算法,對(duì)于中等規(guī)模的BP神經(jīng)網(wǎng)絡(luò)有最快的收斂速度。由于其避免了直接計(jì)算赫賽矩陣,從而減少了訓(xùn)練中的計(jì)算量,但需要較大內(nèi)存量,隨著神經(jīng)元的增多,訓(xùn)練時(shí)間增加較大。常見的訓(xùn)練方法如下:
(2)其他參數(shù)設(shè)置:
- net.trainParam.goal = 1e-3 :確定目標(biāo)值為0.001,到此值時(shí)訓(xùn)練停止
- net.trainFcn=‘trainlm’ :確定訓(xùn)練函數(shù)trainlm。如果newff()中設(shè)置了,后續(xù)可以用不設(shè)置
- net.trainParam.lr = 0.1 : 確定學(xué)習(xí)率為0.1
- net.divideFcn = ‘’ :取消newff()默認(rèn)再次劃分操作。newff()默認(rèn)將訓(xùn)練集重新劃分6:2:2,訓(xùn)練集:測(cè)試集:驗(yàn)證集,在訓(xùn)練過程中會(huì)自動(dòng)在某一處停止,我認(rèn)為是為了防止過擬合吧,實(shí)踐中在新訓(xùn)練集損失和新驗(yàn)證集損失下降不明顯,且驗(yàn)證損失有上升的趨勢(shì)時(shí)停止。對(duì)于數(shù)據(jù)本來就少的情況,建議取消劃分。
- net.trainParam.epochs = 1000 :訓(xùn)練最大迭代次數(shù)
- net.trainParam.min_grad =1e-24 : 最小梯度值,到此值時(shí)訓(xùn)練停止
2. 用newff()搭建一個(gè)簡(jiǎn)單的BP神經(jīng)網(wǎng)絡(luò)
% I. 清空環(huán)境變量 clear all clc% II. 訓(xùn)練集/測(cè)試集產(chǎn)生 p_trian = rand(3,4);%按列看,4個(gè)樣本,每個(gè)樣本維度為3 t_train = rand(1,4);%按列看,4個(gè)樣本標(biāo)簽,每個(gè)標(biāo)簽維度1維p_test = rand(3,4); t_test = rand(1,4);% III. BP神經(jīng)網(wǎng)絡(luò)創(chuàng)建、訓(xùn)練及仿真測(cè)試 % 1. 創(chuàng)建網(wǎng)絡(luò),[3]意思為網(wǎng)絡(luò)含有一個(gè)隱藏層,每層有3個(gè)單元 net = newff(p_train,t_train,[3],{'tansig','purelin'});% 2. 設(shè)置訓(xùn)練參數(shù) net.trainParam.epochs = 1000;%訓(xùn)練批次 net.trainParam.goal = 1e-12;%訓(xùn)練目標(biāo),誤差小于1e-12即結(jié)束訓(xùn)練 net.trainParam.lr = 0.01;%設(shè)置學(xué)習(xí)率 %另外也可以設(shè)置其他訓(xùn)練參數(shù),可看newff()函數(shù)介紹手冊(cè)% 3. 訓(xùn)練網(wǎng)絡(luò) net = train(net,p_train,t_train);% 4. 仿真測(cè)試 t_sim = sim(net,p_test);%預(yù)測(cè)結(jié)果 error = t_test - t_sim;%誤差總結(jié)
以上是生活随笔為你收集整理的Matlab中newff函数使用方法和搭建BP神经网络的方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++批量重命名_手把手教你用Pytho
- 下一篇: java1.9关键字_对 Java 9