matlab在bp神經網路訓練時出現錯誤說未定義與

時間 2021-08-30 11:13:07

1樓:依然特雷西

1、實現%% 以函式的形式訓練神經網路命令。

2、實現%p為輸入向量的方法命令。

3、實現%t為目標向量的命令。

4、實現%建立一個新的前向神經網路的命令。

5、實現%呼叫演算法訓練bp網路的命令。

6、其他設定命令。

2樓:匿名使用者

主要問題出在txt樣本上,資料之間應以空格間隔,而不能是製表符,否則fcanf不能正常讀取。

matlab中的fscanf的用法如下:

a=fscanf(fid,format)

[a, count]=fscanf(fid,format,size)

[a, count]=fscanf(fid,format,size)

個人感覺用的最多的是 這樣的形式:

data = fscanf(fid,format,size);

其中data為讀取內容的陣列,他的大小由size決定。size是一個[m n]的向量,m為行,n為列(注意,這裡讀取的順序是按列優先排列的,不明白的話可以看下面的例子),若n取inf表示讀到檔案末尾。fid為fopen開啟檔案的返回值,format是格式化引數(像printf、scanf)。

舉個小例子:

路徑+檔名:d:\moon.txt

內容:13,1,3.4

3,2.1,23

1,12,2

4,5.4,6

現在為了讀取moon中的資料存在一個陣列裡,可以用如下方法

fid=fopen('d:\moon.txt');data_1 =fscanf(fid,'%f,%f,%f',[3,inf]) ;%這裡得用單引號

data_2 =fscanf(fid,'%f,%f,%f',[2,inf])

data_3 =fscanf(fid,'%f,%f,%f',[2,2])

fclose(fid);

這時data_1, data_2, data_3分別是一個陣列,其內容分別如下:

data_1

13 3 1 4

1 2.1 12 5.4

4 23 2 6

data_2

13 3.4 2.1 1 2 4

1 3 23 12 4,5 6

data_3

13 3.4

1 3由此可見,讀資料的時候,從多維陣列的水平方向,一個一個讀取,傳遞給新的陣列時,從列方向優先。

matlab中函式fscanf在檔案讀取方面的例項如下:

從檔案中有格式地讀資料

fscanf

語法1:[a,count]=fscanf(fid,format,size)

根據指定的格式從fid

檔案按照格式format讀出資料並按size的格式放入記憶體。

a :讀出的資料放入記憶體的變數名

count :返回值。0:失敗、n>0:成功,n是讀出資料個數。

fid :檔案號

size :a的資料的格式

n : 列向量

inf : 讀出檔案全部資料

[m,n] : 讀出資料以m*n的格式放入變數名a內

format :讀出資料的格式

format是字元形式,與c語言基本相同。字元形式中有“%”與字符集(d,i,o,u,x,e,f,g,s,c,…)搭配構成。

如: %s:單字元讀

%c:讀space字元

例:s=fscanf(fid,'%s') 返回一個字元。

a=fscanf(fid,']') 返回一個五位十進位制整數。

size是一個[m n]的向量,m為行,n為列(注意,這裡讀取的順序是按列優先排列的,不明白的話可以看下面的例子),若n取inf表示讀到檔案末尾。

fid為fopen開啟檔案的返回值,

format是格式化引數(像printf、scanf)。

舉個小例子:

內容:13,   1,    3.4

3,    2.1,  23

1,    12,   2

4,    5.4,  6

現在為了讀取001中的資料存在一個陣列裡,可以用如下方法

fid=fopen('001.txt');

data=fscanf(fid,'%f,%f,%f',[3,inf]) ;%這裡得用單引號

fclose(fid);

這時data中的資料如下:

13    3     1     4

1     2.1   12    5.4

3.4   23    2     6

3樓:匿名使用者

new=newff(minmax(p),[s1,s2,1],,'traingdx');

改為net=newff(minmax(p),[s1,s2,1],,'traingdx');

matlab中%的作用

4樓:憑實陀雪

在matlab中,語句後加;的是不輸出計算結果,若不加;則控制檯會有輸出。

比如:[模擬matlab控制檯]

>a=1+2a=

3>a=1+2;

>

5樓:飛實濮嫣

加分號就是不把該行的結果在matlab的視窗中顯示出來,不加就是顯示比如a

=1:4;b=

a*2因為陣列a後面加了分號,所以不會顯示,b沒加分號,所以在matlab的視窗中會顯示b=

2468

matlab中./與/有什麼區別

6樓:哀紹輝

一、演算法不同:./點除 如果a、b是矩陣,a./b就是a、b中對應的每個元素相除,得到一個新的矩陣;如果a、b是兩個數,那麼a./b就是普通的除法。

二、公式不同:/ 除如果a、b是矩陣, 比如ax=b,求出x。那麼x=a\b(代表a的逆乘以b);或者xa=b,x=b/a(代表b乘以a的逆)。

如果a、b是兩個數,那麼a/b就是普通的除法。在對數值計算時,“./”和“/”其實是沒有區別的。

例:對於矩陣a=[a b c d],1./a=[1/a 1/b 1/c 1/d],而1/a表示的是a的逆。

matlab函式舉例:

比如: x=1:1:

10,y=2:2:20,c=x.

*y則:c = 2     /8   / 18  /  32    /50    /72   / 98   /128  / 162   /200./

如果是:c=x*y,就會報錯,因為:*是矩陣相乘,x是陣列即是:

1×10的矩陣,y是陣列即是:1×10的矩陣,x*y顯然不行,因為矩陣相乘,應為:m×n矩陣 乘以  n×r矩陣才行,n要一樣。

7樓:麻瓜

一、./點除

如果a、b是矩陣,a./b就是a、b中對應的每個元素相除,得到一個新的矩陣;

如果a、b是兩個數,那麼a./b就是普通的除法

二、/ 除

如果a、b是矩陣, 比如ax=b,求出x。那麼x=a\b(代表a的逆乘以b);或者xa=b,x=b/a(代表b乘以a的逆)。

如果a、b是兩個數,那麼a/b就是普通的除法。

1.點運算是處理元素之間的運算

2.直接/在矩陣計算中只能處理符合矩陣運演算法則的運算

3.矩陣計算和作圖都是點運算

4.在對數值計算時,“./”和“/”其實是沒有區別的。

5.例:對於矩陣a=[a b c d],1./a=[1/a 1/b 1/c 1/d],而1/a表示的是a的逆

優勢特點:

1.高效的數值計算及符號計算功能,能使使用者從繁雜的數**算分析中解脫出來;

2. 具有完備的圖形處理功能,實現計算結果和程式設計的視覺化;

3.友好的使用者介面及接近數學表示式的自然化語言,使學者易於學習和掌握;

4) 功能豐富的應用工具箱(如訊號處理工具箱、通訊工具箱等) ,為使用者提供了大量方便實用的處理工具。

在應用方面,matlab 產品族可以用來進行以下各種工作:

1.數值分析

2.數值和符號計算

3.工程與科學繪圖

4.控制系統的設計與**

5.數字影象處理技術

6.數字訊號處理技術

7.通訊系統設計與**

8.財務與金融工程

9.管理與排程優化計算(運籌學)

8樓:奕劍秋

點運算是處理的元素之間的運算,而直接的/在矩陣計算中只能處理符合矩陣運演算法則的運算。比如作圖時的運算用的都是點運算。在對數值計算時,“./”和“/”其實是沒有區別的。

例如對於矩陣a=[a b c d],1./a=[1/a 1/b 1/c 1/d],而1/a表示的是a的逆

9樓:付先武

/表示的是兩個矩陣相除,也就是右乘分母矩陣的逆;

./表示的是兩個矩陣對應元素相除;

比如a=[1,2,3],b=[4,5,6],則a/b=0.41,而a./b=[1/4,2/5,3/6];a/b表示的是a*b^-1,也就相當於是矩陣的除法,而a.

/b是對應元素相除。

10樓:匿名使用者

matlab中元素有陣列和矩陣;

矩陣運算由線性代數的規則來定義;

陣列運算逐個元素執行,可用於多維陣列,句點字元(.)區分矩陣和陣列;

故./表示陣列運算,/表示矩陣運算。

更多詳細解釋如下:

matlab中{:}是什麼意思

11樓:匿名使用者

如果你原來定

bai義的nump為元胞陣列,du則nump = nump為轉zhi換為矩陣。

例如:>> a =

a =[3x3 double]

>> a=a

a =1 4 3

0 5 8

7 2 9

注意dao這種回方式僅能取出元胞資料答的第一個元胞例如:>> a =

a =[2x2 double] [2x2 double]>> a = a

a =1 4

0 5

12樓:匿名使用者

nump 為元胞陣列,nump = nump是將元胞陣列轉換為資料矩陣,

matlab中a(:).'是什麼意思 5

13樓:大野瘦子

a(:).'是把矩陣a轉換為一個行向量,就是一行。

例如:>> a = rand(2,3)

a =0.6925    0.3965    0.78020.5567    0.0616    0.3376>> b = a(:)

b =0.6925

0.5567

0.3965

0.0616

0.7802

0.3376

注意事項

a中逗號之前的:表示所有行,逗號之後的1:2:3表示列從1到3取值,步長為2,所以列能取到的值為1,3。

a(:)可以將向量轉換為列向量,行向量相當於直接轉置,列向量不變,而如果是n*m維向量則仍然是以列為主,即按照第一列,第二列的順序轉換為列向量。

而“ ’ ”在matlab中為轉置(共軛轉置),當矩陣含有虛部的時候會先共軛再轉置,因此當只需要轉置時要用” .‘ “,應當從平時就養成良好習慣轉置用.’,避免出現錯誤。

BP人工神經網路的收斂是什麼,bp神經網路收斂問題

檀君博 收斂和迭代演算法有關。反向傳播演算法是定義乙個誤差er 往往是輸出結果與預想結果之間的某個範數 然後求出滿足誤差極小的權向量。如果把誤差看成乙個連續函式 泛函 的話,求對權向量各分量的偏導為0即可,但是實際上它是離散的,所以我們需要用迭代來求最小梯度。如果是新定義演算法的話理論上的收斂要證明...

matlab中建立bp神經網路的函式newff的引數的

1.newff雖然沒有規定輸入層神經元個數,那輸入層神經元個數是如何確定的?輸入層是根據你讀入資料的維度,自動生成的。2.我現在讀入了10張 把每張 歸一化成了50 20的,並轉換成1 1000的行向量,最後生成了10 1000的二維矩陣,然後,我再用eye 10,10 函式製造了一個單位矩陣,那麼...

BP神經網路的訓練集需要大樣本嗎?一般樣本個數為多少

這個沒有明確要求,樣本也不是越多越好。通常情況下,你的樣本可以一部分用來做驗證。加速你有100個樣本,90 用來做訓練,10 用來做驗證等,當然,有時候還得留下10 做測試用。我個人的經驗是,樣本數儘量在10以上吧。 這要看做什麼用了 只要訓練樣本的規律性很好的話那自然越多越好,如果不能滿足一致規律...