1. 如何在R語言中進行神經網路模型的建立
不能發鏈接,所以我復制過來了。
#載入程序和數據
library(RSNNS)
data(iris)
#將數據順序打亂
iris <- iris[sample(1:nrow(iris),length(1:nrow(iris))),1:ncol(iris)]
#定義網路輸入
irisValues <- iris[,1:4]
#定義網路輸出,並將數據進行格式轉換
irisTargets <- decodeClassLabels(iris[,5])
#從中劃分出訓練樣本和檢驗樣本
iris <- splitForTrainingAndTest(irisValues, irisTargets, ratio=0.15)
#數據標准化
iris <- normTrainingAndTestSet(iris)
#利用mlp命令執行前饋反向傳播神經網路演算法
model <- mlp(iris$inputsTrain, iris$targetsTrain, size=5, learnFunc="Quickprop", learnFuncParams=c(0.1, 2.0, 0.0001, 0.1),maxit=100, inputsTest=iris$inputsTest, targetsTest=iris$targetsTest)
#利用上面建立的模型進行預測
predictions <- predict(model,iris$inputsTest)
#生成混淆矩陣,觀察預測精度
confusionMatrix(iris$targetsTest,predictions)
#結果如下:
# predictions
#targets 1 2 3
# 1 8 0 0
# 2 0 4 0
# 3 0 1 10
2. 如何創建兩個隱藏層的BP神經網路
我自己的總結是:
1,隱層的神經網路演算法1.1構造方法選擇
首先使用三個隱藏層的數量來確定三個隱藏層數找到的最小值和最大值的值,然後從最小來驗證模型的預測誤差,直到它達到最大值。最後,選擇模型誤差最小隱藏層數。該方法適用於兩個隱藏層的網路。
1.2 Delete方法
單隱層網路的非線性映射能力弱,同樣的問題,以達到預定的隱層節點之間的映射一些,以增加網路的可調參數,它是適合用於刪除法。
1.3黃金分割法
的主要思路:一是在[A,B]尋找理想的隱層節點,從而充分保證逼近能力和泛化能力的網路。為了滿足高精度近似,在金色的原則,按照擴大搜尋范圍區間,即該區間[B,C] = 0.619 *(鈣)+ A)(其中B,范圍[B,C]尋找最佳逼近能力更應要求隱層節點數,在實際應用中,人們可以選擇。
3. matlab建立bp神經網路如何設置兩個隱含層呢
題主那個newff裡面的10看到沒?那個就是設置1個隱含層的神經元個數,要多個隱含層就把10改成[4,10,1]就是第一個隱含層有4個神經元,第二個隱含層10個神經元,最後一層輸出層1個神經元。然後你的{TF1 TF2}不用改。這樣應該能用了。
然後給你一個newff的各項參數使用的介紹:
4. 如何訓練神經網路
1、先別著急寫代碼
訓練神經網路前,別管代碼,先從預處理數據集開始。我們先花幾個小時的時間,了解數據的分布並找出其中的規律。
Andrej有一次在整理數據時發現了重復的樣本,還有一次發現了圖像和標簽中的錯誤。所以先看一眼數據能避免我們走很多彎路。
由於神經網路實際上是數據集的壓縮版本,因此您將能夠查看網路(錯誤)預測並了解它們的來源。如果你的網路給你的預測看起來與你在數據中看到的內容不一致,那麼就會有所收獲。
一旦從數據中發現規律,可以編寫一些代碼對他們進行搜索、過濾、排序。把數據可視化能幫助我們發現異常值,而異常值總能揭示數據的質量或預處理中的一些錯誤。
2、設置端到端的訓練評估框架
處理完數據集,接下來就能開始訓練模型了嗎?並不能!下一步是建立一個完整的訓練+評估框架。
在這個階段,我們選擇一個簡單又不至於搞砸的模型,比如線性分類器、CNN,可視化損失。獲得准確度等衡量模型的標准,用模型進行預測。
這個階段的技巧有:
· 固定隨機種子
使用固定的隨機種子,來保證運行代碼兩次都獲得相同的結果,消除差異因素。
· 簡單化
在此階段不要有任何幻想,不要擴增數據。擴增數據後面會用到,但是在這里不要使用,現在引入只會導致錯誤。
· 在評估中添加有效數字
在繪制測試集損失時,對整個測試集進行評估,不要只繪制批次測試損失圖像,然後用Tensorboard對它們進行平滑處理。
· 在初始階段驗證損失函數
驗證函數是否從正確的損失值開始。例如,如果正確初始化最後一層,則應在softmax初始化時測量-log(1/n_classes)。
· 初始化
正確初始化最後一層的權重。如果回歸一些平均值為50的值,則將最終偏差初始化為50。如果有一個比例為1:10的不平衡數據集,請設置對數的偏差,使網路預測概率在初始化時為0.1。正確設置這些可以加速模型的收斂。
· 人類基線
監控除人為可解釋和可檢查的損失之外的指標。盡可能評估人的准確性並與之進行比較。或者對測試數據進行兩次注釋,並且對於每個示例,將一個注釋視為預測,將第二個注釋視為事實。
· 設置一個獨立於輸入的基線
最簡單的方法是將所有輸入設置為零,看看模型是否學會從輸入中提取任何信息。
· 過擬合一個batch
增加了模型的容量並驗證我們可以達到的最低損失。
· 驗證減少訓練損失
嘗試稍微增加數據容量。
5. 神經網路的隱含層節點數怎麼設置啊比如要設置18層隱含節點數!跪求,工作急用!
隱層一般是一層或兩層,很少會採用三層以上,至少隱層的節點數確定,一般有以下幾種方法:1、有經驗的人員根據以往的經驗湊試出節點個數。2、某些學術研究出固定的求節點方法,如2m+1個隱層節點,m為輸入個數。3、修剪法。剛開始建立足夠多的節點數,在訓練過程中,根據節點數的相關程度,刪除重復的節點。
6. 1.如何用MATLAB神經網路工具箱創建BP神經網路模型具體有哪些步驟請高手舉實例詳細解釋下 2.如何把輸
%人臉識別模型,臉部模型自己找吧。
function mytest()
clc;
images=[ ];
M_train=3;%表示人臉
N_train=5;%表示方向
sample=[];
pixel_value=[];
sample_number=0;
for j=1:N_train
for i=1:M_train
str=strcat('Images\',num2str(i),'_',num2str(j),'.bmp'); %讀取圖像,連接字元串形成圖像的文件名。
img= imread(str);
[rows cols]= size(img);%獲得圖像的行和列值。
img_edge=edge(img,'Sobel');
%由於在分割圖片中我們可以看到這個人臉的眼睛部分也就是位於分割後的第二行中,位置變化比較大,而且眼睛邊緣檢測效果很好
sub_rows=floor(rows/6);%最接近的最小整數,分成6行
sub_cols=floor(cols/8);%最接近的最小整數,分成8列
sample_num=M_train*N_train;%前5個是第一幅人臉的5個角度
sample_number=sample_number+1;
for subblock_i=1:8 %因為這還在i,j的循環中,所以不可以用i
block_num=subblock_i;
pixel_value(sample_number,block_num)=0;
for ii=sub_rows:(2*sub_rows)
for jj=(subblock_i-1)*sub_cols+1:subblock_i*sub_cols
pixel_value(sample_number,block_num)=pixel_value(sample_number,block_num)+img_edge(ii,jj);
end
end
end
end
end
%將特徵值轉換為小於1的值
max_pixel_value=max(pixel_value);
max_pixel_value_1=max(max_pixel_value);
for i=1:3
mid_value=10^i;
if(((max_pixel_value_1/mid_value)>1)&&((max_pixel_value_1/mid_value)<10))
multiple_num=1/mid_value;
pixel_value=pixel_value*multiple_num;
break;
end
end
% T 為目標矢量
t=zeros(3,sample_number);
%因為有五類,所以至少用3個數表示,5介於2的2次方和2的3次方之間
for i=1:sample_number
% if((mod(i,5)==1)||(mod(i,5)==4)||(mod(i,5)==0))
if(i<=3)||((i>9)&&(i<=12))||((i>12)&&(i<=15))
t(1,i)=1;
end
%if((mod(i,5)==2)||(mod(i,5)==4))
if((i>3)&&(i<=6))||((i>9)&&(i<=12))
t(2,i)=1;
end
%if((mod(i,5)==3)||(mod(i,5)==0))
if((i>6)&&(i<=9))||((i>12)&&(i<=15))
t(3,i)=1;
end
end
% NEWFF——生成一個新的前向神經網路
% TRAIN——對 BP 神經網路進行訓練
% SIM——對 BP 神經網路進行模擬
% 定義訓練樣本
% P 為輸入矢量
P=pixel_value'
% T 為目標矢量
T=t
size(P)
size(T)
% size(P)
% size(T)
% 創建一個新的前向神經網路
net_1=newff(minmax(P),[10,3],{'tansig','purelin'},'traingdm')
% 當前輸入層權值和閾值
inputWeights=net_1.IW{1,1}
inputbias=net_1.b{1}
% 當前網路層權值和閾值
layerWeights=net_1.LW{2,1}
layerbias=net_1.b{2}
% 設置訓練參數
net_1.trainParam.show = 50;
net_1.trainParam.lr = 0.05;
net_1.trainParam.mc = 0.9;
net_1.trainParam.epochs = 10000;
net_1.trainParam.goal = 1e-3;
% 調用 TRAINGDM 演算法訓練 BP 網路
[net_1,tr]=train(net_1,P,T);
% 對 BP 網路進行模擬
A = sim(net_1,P);
% 計算模擬誤差
E = T - A;
MSE=mse(E)
x=[0.14 0 1 1 0 1 1 1.2]';
sim(net_1,x)
7. (急)如何用MATLAB建立ANN(人工神經網路模型)
問題描述:
有兩個自變數,一個因變數,10個樣本(這里就取少一點好了)。用實際問題來表述,假設一個股票,開盤價 x1,收盤價 x2,第二天的股價 y。 那用神經網路來預測的目的是,根據10天的開盤價和收盤價,來預測未來股價。顯然,這里的y與x1和x2相關,我們要訓練一個網路(net)來讓他盡可能的預測一個y
MATLAB程序
clc
clear
load data input output
%input就是包含了x1和x2 10天數據的矩陣,說白了就是20個數的矩陣。output是y的一個向量,%10個數
%需要自己找一些數據賦值給input和ouput
P=input;
T=output;
%這里P和T必須是 x1 x2和y的行向量組合。對於P,x1是行向量,x2是行向量。P=[x1;x2]; T=y. y是行向量
Epochs=5000;
NodeNum=12; TypeNum=1;
TF1='logsig'; TF2='purelin';
%設置一些初始參數,Epochs是迭代上限次數,NodeNum是第一個隱藏層的神經元個數,%TypeNum是幾層。TF1和TF2分別定義了幾個傳遞函數。
net=newff(minmax(P),[NodeNum TypeNum],{TF1 TF2},'trainlm');
%建立一個神經網路,訓練輸入和輸出數據都有了,設置隱藏層的個數。
net.trainParam.epochs=Epochs;
net.trainParam.goal=1e-4;
net.trainParam.min_grad=1e-4;
net.trainParam.show=200;
net.trainParam.time=inf;
%設置一些訓練時的參數,第一個是每次訓練的最大迭代次數;
net=train(net,P,T);
%開始網路訓練
P_test=P;
B_test=T;
%就用原始的數據進行測試
X=sim(net,P_test);
%測試
Erro=abs(B_test-X);
sigma=std(Erro);
%計算出預測值和實際值的誤差,求出方差。將來方差可以用來隨機調整