日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ufldl学习笔记与编程作业:Multi-Layer Neural Network(多层神经网络+识别手写体编程)...

發布時間:2023/12/20 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ufldl学习笔记与编程作业:Multi-Layer Neural Network(多层神经网络+识别手写体编程)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ufldl學習筆記與編程作業:Multi-Layer Neural Network(多層神經網絡+識別手寫體編程)


ufldl出了新教程,感覺比之前的好,從基礎講起,系統清晰,又有編程實踐。

在deep learning高質量群里面聽一些前輩說,不必深究其它機器學習的算法,能夠直接來學dl。

于是近期就開始搞這個了。教程加上matlab編程。就是完美啊。

新教程的地址是:http://ufldl.stanford.edu/tutorial/


本節學習地址:http://ufldl.stanford.edu/tutorial/supervised/MultiLayerNeuralNetworks/


神經網絡一般求解過程:

1 正向傳播,把每一層的激活值求出來,還有總的cost。

? 基本上,隱藏層的激活值都是加權和再加上bias,再激活函數比方sigmoid。

? 輸出層的激活值,或許不叫激活值,叫特征值更好。以softmax為例,是將上一層的激活值作為特征輸入X。將權重W作為theta參數,依據公式算出h。

2 反向傳播。

先計算輸出層的殘差。這個能夠依據損失函數直接求導。

由l+1層的殘差和l層的激活值,就可以求得l層的W和b的梯度。

由l+1層的殘差和l層的W,還有l層激活函數的偏導數,就可以求得l層的殘差。

4 更新參數W和b

5 增加權重衰減項防止過擬合。求cost和梯度的時候。須要做對應的調整。


以下是supervised_dnn_cost.m的代碼:

function [ cost, grad, pred_prob] = supervised_dnn_cost( theta, ei, data, labels, pred_only) %SPNETCOSTSLAVE Slave cost function for simple phone net % Does all the work of cost / gradient computation % Returns cost broken into cross-entropy, weight norm, and prox reg % components (ceCost, wCost, pCost)%% default values po = false; if exist('pred_only','var')po = pred_only; end;%% reshape into network numHidden = numel(ei.layer_sizes) - 1; numSamples = size(data, 2); hAct = cell(numHidden+1, 1); gradStack = cell(numHidden+1, 1); stack = params2stack(theta, ei);%% forward prop %%% YOUR CODE HERE %%% for l=1:numHidden %隱藏層特征計算if(l == 1)z = stack{l}.W*data;else z = stack{l}.W*hAct{l-1};endz = bsxfun(@plus,z,stack{l}.b);hAct{l}=sigmoid(z); end%輸出層(softmax)特征計算 h = (stack{numHidden+1}.W)*hAct{numHidden}; h = bsxfun(@plus,h,stack{numHidden+1}.b); e = exp(h); pred_prob = bsxfun(@rdivide,e,sum(e,1)); %概率表 hAct{numHidden+1} = pred_prob; %[~,pred_labels] = max(pred_prob, [], 1);%% return here if only predictions desired. if pocost = -1; ceCost = -1; wCost = -1; numCorrect = -1;grad = [];return; end;%% compute cost 輸出層softmax的cost %%% YOUR CODE HERE %%% ceCost =0; c= log(pred_prob); %fprintf("%d,%d\n",size(labels,1),size(labels,2)); %60000,1 I=sub2ind(size(c), labels', 1:size(c,2));%找出矩陣c的線性索引,行由labels指定,列由1:size(c,2)指定,生成線性索引返回給I values = c(I); ceCost = -sum(values);%% compute gradients using backpropagation %%% YOUR CODE HERE %%% % Cross entroy gradient%d = full(sparse(labels,1:size(c,2),1)); d = zeros(size(pred_prob)); d(I) = 1; error = (pred_prob-d); %輸出層的殘差 %梯度。殘差反向傳播 for l = numHidden+1: -1 : 1 gradStack{l}.b = sum(error,2);if(l == 1)gradStack{l}.W = error*data';break;%l==1時。即當前層是第一層隱藏層時,不須要再傳播殘差else gradStack{l}.W = error*hAct{l-1}';enderror = (stack{l}.W)'*error .*hAct{l-1}.* (1-hAct{l-1});%后面部分是激活函數偏導數 end%% compute weight penalty cost and gradient for non-bias terms %%% YOUR CODE HERE %%%wCost = 0; for l = 1:numHidden+1wCost = wCost + .5 * ei.lambda * sum(stack{l}.W(:) .^ 2);%全部權值的平方和 endcost = ceCost + wCost;% Computing the gradient of the weight decay. for l = numHidden : -1 : 1gradStack{l}.W = gradStack{l}.W + ei.lambda * stack{l}.W;%softmax沒用到權重衰減項 end%% reshape gradients into vector [grad] = stack2params(gradStack); end

原來訓練集是60000條,有點費時間,我改了run_train.m代碼,把訓練集改了10000條。

當然影響了精確度。



恢復源碼,拿60000條做訓練集。結果例如以下:




本文作者:linger

本文鏈接:http://blog.csdn.net/lingerlanlan/article/details/38464317



轉載于:https://www.cnblogs.com/lytwajue/p/6771119.html

總結

以上是生活随笔為你收集整理的ufldl学习笔记与编程作业:Multi-Layer Neural Network(多层神经网络+识别手写体编程)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。