?? train_lin_denois.html
字號:
<html><head> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-8859-1"> <title>train_lin_denois.m</title><link rel="stylesheet" type="text/css" href="../../../m-syntax.css"></head><body><code><span class=h1>% TRAIN_LIN_DENOIS Training of linear PCA model for image denoising. </span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Description:</span></span><br><span class=help>% The linear PCA model is trained to describe an input</span><br><span class=help>% class of images corrupted by noise. The training data </span><br><span class=help>% contains images corrupted by noise and corresponding </span><br><span class=help>% ground truth. The output dimension of the linear PCA</span><br><span class=help>% is tuned by cross-validation. The objective function </span><br><span class=help>% is a sum of squared differences between ground truth </span><br><span class=help>% images and reconstructed images. </span><br><span class=help>%</span><br><span class=help>% See also</span><br><span class=help>% PCA, PCAREC, LINPROJ.</span><br><span class=help>%</span><br><hr><span class=help1>% <span class=help1_field>About:</span> Statistical Pattern Recognition Toolbox</span><br><span class=help1>% (C) 1999-2003, Written by Vojtech Franc and Vaclav Hlavac</span><br><span class=help1>% <a href="http://www.cvut.cz">Czech Technical University Prague</a></span><br><span class=help1>% <a href="http://www.feld.cvut.cz">Faculty of Electrical Engineering</a></span><br><span class=help1>% <a href="http://cmp.felk.cvut.cz">Center for Machine Perception</a></span><br><br><span class=help1>% <span class=help1_field>Modifications:</span></span><br><span class=help1>% 07-jun-2004, VF</span><br><span class=help1>% 05-may-2004, VF</span><br><span class=help1>% 17-mar-2004, VF</span><br><br><hr><span class=comment>% Setting </span><br><span class=comment>%-------------------------------------------------------</span><br><br><span class=comment>% # folds for cross-validation; </span><br><span class=comment>% num_folds = 1 means 50/50 - training/testing part</span><br>num_folds = 1; <br><br><span class=comment>% parameters to be evaluated by cross-validation:</span><br><span class=comment>%New_Dim_Range = [5 10 20 30 40 60 80 100]; % USPS</span><br>New_Dim_Range = [1 2]; <span class=comment>% noisy_circle</span><br><br>input_data_file = <span class=quotes>'noisy_circle'</span>;<br>output_data_file = [];<br><span class=comment>%input_data_file = '/home.dokt/xfrancv/data/usps/usps_noisy';</span><br><span class=comment>%output_data_file = 'USPSModelLinPCA';</span><br><br><span class=comment>%-------------------------------------------------------</span><br><br><span class=comment>% Loads training and testing data</span><br>load(input_data_file,<span class=quotes>'trn'</span>,<span class=quotes>'tst'</span>);<br>[Dim,num_data] = size( trn.X );<br><br><span class=comment>% Data partitioning for cross-validation</span><br>[itrn,itst]=crossval(num_data,num_folds);<br><br><span class=comment>% Tuning linear PCA model</span><br><span class=comment>%-------------------------------------------------------</span><br>Mse = [];<br><br><span class=keyword>for</span> new_dim = New_Dim_Range,<br> <br> <span class=io>fprintf</span>(<span class=quotes>'\nnew_dim = %d\n'</span>, new_dim);<br> <br> cv_mse = 0; <br> <span class=keyword>for</span> i=1:num_folds,<br> <br> <span class=io>fprintf</span>(<span class=quotes>'\n'</span>);<br> <br> trn_X = trn.gnd_X(:,itrn{i});<br> val_gnd_X = trn.gnd_X(:,itst{i});<br> val_corr_X = trn.X(:,itst{i});<br><br> <br> <span class=io>fprintf</span>(<span class=quotes>'Computing Linear PCA...'</span>);<br> lin_model = pca(trn_X, new_dim);<br> <span class=io>fprintf</span>(<span class=quotes>'done\n'</span>);<br><br> <span class=io>fprintf</span>(<span class=quotes>'Projecting validation data...'</span>);<br> val_reconst_X = pcarec( val_corr_X, lin_model );<br> <span class=io>fprintf</span>(<span class=quotes>'done.\n'</span>);<br><br> dummy = (val_reconst_X - val_gnd_X).^2;<br> <br> mse = sum(dummy(:))/size(val_gnd_X,2);<br> <br> <span class=io>fprintf</span>(<span class=quotes>'folder %d/%d: validation errors mse=%f\n'</span>, ...<br> i, num_folds, mse);<br> <br> cv_mse = cv_mse + mse;<br> <span class=keyword>end</span><br> <br> cv_mse = cv_mse/num_folds;<br> <br> Mse(find(new_dim==New_Dim_Range)) = cv_mse;<br> <br> <span class=io>fprintf</span>(<span class=quotes>'new_dim = %d: mse = %f\n'</span>, new_dim, cv_mse);<br><span class=keyword>end</span><br><br><span class=comment>% take the best dimension</span><br><span class=comment>%--------------------------------------------------</span><br>[dummy,inx] = min(Mse);<br><span class=io>fprintf</span>(<span class=quotes>'\nMin(mse) = %f, dim = %f\n'</span>, ...<br> Mse(inx), New_Dim_Range(inx) );<br><br><span class=comment>% compute PCA with tbe best dimesion and all training data</span><br><span class=comment>%----------------------------------------------------------</span><br><span class=io>fprintf</span>(<span class=quotes>'Computing optimal Kernel PCA...'</span>);<br>lpca_model = pca( trn.X, New_Dim_Range(inx) );<br><span class=io>fprintf</span>(<span class=quotes>'done.\n'</span>);<br><br><span class=keyword>if</span> isempty(output_data_file),<br> <span class=graph>figure</span>; hold on;<br> xlabel(<span class=quotes>'dim'</span>); ylabel(<span class=quotes>'mse'</span>);<br><br> <span class=graph>plot</span>(New_Dim_Range,Mse);<br><span class=keyword>else</span><br> save(output_data_file,<span class=quotes>'New_Dim_Range'</span>,...<br> <span class=quotes>'Mse'</span>,<span class=quotes>'num_folds'</span>,<span class=quotes>'input_data_file'</span>,...<br> <span class=quotes>'output_data_file'</span>,<span class=quotes>'lpca_model'</span>);<br><span class=keyword>end</span><br><br><span class=comment>% plot denosing in 2D case only</span><br><span class=comment>%-------------------------------------</span><br><span class=keyword>if</span> Dim == 2 & isempty(output_data_file),<br> X = pcarec(tst.X, lin_model );<br><br> mse = sum(sum((X-tst.gnd_X).^2 ));<br> <span class=io>fprintf</span>(<span class=quotes>'\ntest mse=%f\n'</span>, mse);<br> <br> <span class=graph>figure</span>; hold on;<br> h0=ppatterns(tst.gnd_X,<span class=quotes>'r+'</span>);<br> h1=ppatterns(tst.X,<span class=quotes>'gx'</span>);<br> h2=ppatterns(X,<span class=quotes>'bo'</span>);<br> legend([h0 h1 h2],<span class=quotes>'Ground truth'</span>,<span class=quotes>'Noisy'</span>,<span class=quotes>'Reconst'</span>);<br><span class=keyword>end</span><br><br><span class=comment>% EOF</span><br></code>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -