導航:首頁 > 五金知識 > ufldlmatlab工具箱

ufldlmatlab工具箱

發布時間:2022-09-18 11:20:25

1. ufldl tutorial logistic regression matlab代碼要跑多久

ufldl學習筆記與編程作業:Logistic Regression(邏輯回歸)
ufldl出了新教程,感覺比之前的好,從基礎講起,系統清晰,又有編程實踐。
在deep learning高質量群裡面聽一些前輩說,不必深究其他機器學習的演算法,可以直接來學dl。
於是最近就開始搞這個了,教程加上matlab編程,就是完美啊。

2. python裡面類似於Matlab中的fminunc方法或minfunc方法叫什麼名字,怎麼調用

在看完UFLDL自編碼器autoencoder的代碼後,發現其中的訓練過程並不是使用訓練的手段找到最優的參數theta,而是使用了minFunc尋找代價函數的最小值,並返回優化後的參數theta。其中的minFunc函數的說明裡頭提到了這個函數提供的各種選項和matlab提供的fminunc函數非常像,所以就去看了下matlab的help。
這里貼出fminunc函數help中最基本的翻譯:
fminunc試圖找到一個多變數函數的最小值,從一個估計的初試值開始,這通常被認為是無約束非線性優化問題。
x =fminunc(fun,x0) 試圖從x0附近開始找到函數的局部最小值,x0可以是標量,向量或矩陣
x =fminunc(fun,x0,options) 根據結構體options中的設置來找到最小值,可用optimset來設置options
x =fminunc(problem) 為problem找到最小值,而problem是在Input Arguments中定義的結構體

Create thestructure problem by exporting a problem from Optimization Tool, as describedin Exporting Your Work.

[x,fval]= fminunc(...) 返回目標函數fun在解x處的函數值
[x,fval,exitflag]= fminunc(...) 返回一個描述退出條件的值exitflag
[x,fval,exitflag,output]= fminunc(...) 返回一個叫output的結構體,它包含著優化的信息
[x,fval,exitflag,output,grad]= fminunc(...) 返回函數在解x處的梯度的值,存儲在grad中
[x,fval,exitflag,output,grad,hessian]= fminunc(...) 返回函數在解x處的Hessian矩陣的值,存儲在hessian中

對這些說明理解的不是很透徹,然後做了幾個簡單的實驗,如下:

定義函數fun1
function y = fun1(x)
y = (x - 2)^2;
end
顯然fun1在x=2處取得最小值0

clear all;
x0 = 1.5
[x,fval,exitflag,output,grad,hessian] =fminunc(@fun1,x0)

運行結果是:
x =2.0000 fval =1.2490e-16
exitflag = 1
output =
iterations: 1
funcCount: 6
stepsize: 0.5000
firstorderopt: 7.4506e-09
algorithm: 'medium-scale: Quasi-Newtonline search'
message: [1x436 char]
grad = 7.4506e-09 hessian = 2

再做一個多變數實驗,定義函數fun2
function y = fun2(x)
y = (x(1)^2)+(x(2)^2);
end

顯然,fun2在x1=0,x2=0處取得最小值0

clear all;
x0 = [2;2];
[x,fval,exitflag,output,grad,hessian]= fminunc(@fun2,x0)

運行結果是:
x =
0
0
fval =0
exitflag =1
output =
iterations: 2
funcCount: 9
stepsize: 1
firstorderopt: 1.4901e-08
algorithm: 'medium-scale: Quasi-Newtonline search'
message: [1x436 char]
grad =
1.0e-07 *
0.1490
0.1490
hessian =
NaN NaN
NaN NaN
但是假如函數形如f(x,y),而且f(x,y)中還有可變的參數a,b的話如何求取其最小值呢?定義了第三個函數fun3
function y = fun3(x,a,b)
y = (x(1)-a)^2+(x(2)-b)^2;
end
這個函數含兩個自變數x(1),x(2),還有參數a,b,顯然函數在x(1)=a,x(2)=b時取得最小值0
clear all;
x0 = [2;2]
a = 1
b = 0
x = fminunc(@(p)fun3(p,a,b),x0)%注意此處的寫法
結果是
x =
1.0000
0.0000
fminunc找到了當我定義a=1,b=0時的函數的最小值是在x=[1;0]處,以後要找到一個需要賦值,還要指定參數值的函數的最小值的時候就可以這樣做了。但是不要把x(1),x(2)分開定義成x,y,這樣只會給自己找麻煩。fminunc的help里頭提到一個problem的結構體好像可以解決這個問題,沒有深究,讀者自己去看。

%==================================================================
現在我們用fminunc來找二元邏輯回歸的代價函數的最小值
數據在這http://openclassroom.stanford.e/MainFolder/DocumentPage.php?course=DeepLearning&doc=exercises/ex4/ex4.html

logistic_test.m
clear all; close all;

x = load('G:\training_data\ex4x.dat');
y = load('G:\training_data\ex4y.dat');

theta = [-15.0; 0.14; 0.15];
J = logisticCost(theta,x,y);

theta0 = zeros(3,1);%隨機設置一個初始值,其實就在上面那個theta附近
data = x;
label = y;
options=optimset('MaxIter',100);
[opttheta,fval] = fminunc(@(p)logisticCost(p,data,label),theta0)
定義代價函數logisticCost.m
function cost = logisticCost(theta, data, label)

[trainNum trainLength] =size(data);
z = [ones(trainNum,1)data]*theta;

h = inline('1.0 ./ (1.0 + exp(-z))');
htheta = h(z);
cost =(-1/trainNum)*(label'*log(htheta) + (1-label)'*log(1-htheta));
運行[opttheta,fval]= fminunc(@(p) logisticCost(p,data,label),theta0)
的結果是
opttheta =
-16.3787
0.1483
0.1589
fval =
0.4054
這個結果跟上面下載數據的網頁處提供的結果一樣

其實注意到fminunc是因為稀疏自編碼器autoencoder中train.m代碼中步驟3:
numgrad =computeNumericalGradient( @(x) sparseAutoencoderCost(x, visibleSize,...
hiddenSize, lambda,...
sparsityParam, beta,...
patches), theta);

此處的寫法和x = fminunc(@(p) fun3(p,a,b),x0)類似,我其實是模仿train.m的代碼做了個更簡單的實驗,將參數a,b加入到了fun3中去。在UFLDL的softmax回歸的代碼softmaxTrain.m中也有類似的求最優的theta的做法,所以從這些實現尋找最優theta的方法中我們發現,神經網路的訓練過程可能不是通過一遍一遍的for來實現,而是通過非線性優化之類的尋找最優解的方法來實現的。更多的內容可以自行網路BFGS,L-BFGS之類minFunc中提到的東西來了解。

3. CNN神經網路給圖像分類(Matlab)

  1. 你要看你的圖像是什麼。如果是彩色數字,先轉成灰度。用MNIST訓練網路。如果是各種主題,用彩色的imageNET訓練。如果你的數據量大到足以與數據集媲美,那麼直接用你的數據訓練網路即可。

    在流行的數據集上訓練完,你需要固定卷積池化層,只訓練後面的全連接層參數,用你自己的數據集。

  2. CNN一是調整網路結構,幾層卷積幾層池化,卷積的模板大小等。而是在確定結構上調整參數,weight scale,learning rate,reg等。

  3. 你用CNN做圖像分類,無非是把CNN當成學習特徵的手段,你可以吧網路看成兩部分,前面的卷積層學習圖像基本-中等-高層特徵,後面的全連接層對應普通的神經網路做分類。


需要學習的話,首先你去看UFLDL教程。然後cs231n


與其問別人,首先你看了imageNet數據集了嗎?


對於把流行數據集與自己數據混合訓練模型的方法。如果兩種數據十分相似,也未嘗不可。但是對於流行數據集而言,自己的標注數據量一般不會太大,如果是1:1000,1:100這種比例,那麼可能不加自己的數據,完全用數據集訓練的模型就能得到一個還好的結果。

如果自己的數據和數據集有些差別,那混在一起我認為自己的是在用自己的數據當做雜訊加到數據集中。cnn認為圖像是局部相關的,而欺騙CNN的方法則主要出於,自然圖像分布在一種流形結構中,訓練的模型需要這種流形假設,而人工合成的圖像由於添加非自然噪點,不滿足模型假設,所以能用肉眼難分辨的雜訊嚴重干擾分類結果。

如果二者相差過大,數據集是一種分布,你的數據是另一種,放到一起訓練,我沒試過,但我認為結果不會太好。

這時候只能把數據集用來訓練cnn的特徵提取能力。而後用於分類的全連接層,視你的數據量調整規模。

4. matlab中的autoencoder中使用的是什麼方法

在看完UFLDL自編碼器autoencoder的代碼後,發現其中的訓練過程並不是使用訓練的手段找到最優的參數theta,而是使用了minFunc尋找代價函數的最小值,並返回優化後的參數theta。其中的minFunc函數的說明裡頭提到了這個函數提供的各種選項和matlab...

5. 在 ufldl中矢量化編碼過程出現out of memory怎麼解決

matlab out of memory一般是由於數據量過大,MATLAB終於找到罷工機會了,之後它就調皮了下下,我知道幾種解決方法
第一種:及時釋放你需要的變數;
第二種:如果你的矩陣中0很多,你可以考慮用稀疏矩陣表示;
第三種:可能和什麼內存碎片有關吧!你可以查查pack;MATLAB的help pack中有這么一句話」 If you run out of memory often,.....「,你懂的!!
貌似,調整計算機儲存空間分配也可以處理,我不是計算機專業的,你可以問問精通計算機內存的大神...
如果都沒用,那就精彩了~~~

閱讀全文

與ufldlmatlab工具箱相關的資料

熱點內容
怎麼看機械表要保養 瀏覽:517
小學生雕刻工具箱 瀏覽:417
k5儀表信息怎麼調 瀏覽:936
青島泰科閥門怎麼樣 瀏覽:277
地熱總閥門開關擰不動怎麼辦 瀏覽:60
03儀表盤模式怎麼換 瀏覽:284
ktv設備有哪些設備 瀏覽:191
關節軸承怎麼安裝使用 瀏覽:838
生產山楂糕需要哪些設備 瀏覽:91
機械表後面的飛輪是什麼 瀏覽:163
怎麼實現儀表盤ar導航 瀏覽:722
某同學設計了如下裝置來 瀏覽:633
超聲波儀器動態范圍是什麼意思 瀏覽:11
傳動裝置分析 瀏覽:263
風機與閥門連鎖怎麼實現 瀏覽:314
消防管道閥門抽檢比例 瀏覽:313
礦用自動除塵噴霧裝置生產工藝 瀏覽:334
鑄造灰鐵很硬怎麼回事 瀏覽:505
天然氣灶沒有自動滅火裝置會有什麼後果 瀏覽:221
江蘇旭潤設備有限公司怎麼樣 瀏覽:653