Caffe中權值是怎麼更新的
網址:http://blog.csdn.net/mounty_fsc/article/details/51588773
(Caffe,LeNet)權值更新(七)
在Solver::ApplyUpdate()函式中,根據反向傳播階段計算的loss關於網路權值的偏導,使用配置的學習策略,更新網路權值從而完成本輪學習
1 模型優化
1.1 損失函式
損失函式
在caffe中,可以分為三個階段:
- 前向計算階段,這個階段計算
fW - 反向傳播階段,這個階段計算
∇fW - 權值更新階段,這個階段通過
∇fW,∇r(W) 等計算ΔW 從而更新W
1.2 隨機梯度下降
在lenet中,solver的型別為SGD(Stochastic gradient descent)
SGD通過以下公式對權值進行更新:
其中,
2 程式碼分析
2.1 ApplyUpdate
<code class="language-c++ hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">void</span> SGDSolver<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><</span>Dtype<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">></span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::ApplyUpdate</span>() { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 獲取該輪迭代的學習率(learning rate)</span> Dtype rate <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> GetLearningRate(); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 對每一層網路的權值進行更新</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 在lenet中,只有`conv1`,`conv2`,`ip1`,`ip2`四層有引數</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 每層分別有引數與偏置引數兩項引數</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 因而`learnable_params_`的size為8.</span> for (int param_id <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; param_id <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><</span> this<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>net_<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>learnable_params()<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>size(); <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">++</span>param_id) { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 歸一化,iter_size為1不需要,因而lenet不需要</span> Normalize(param_id); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 正則化</span> Regularize(param_id); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 計算更新值\delta w</span> ComputeUpdateValue(param_id, rate); } <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 更新權值</span> this<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>net_<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>Update(); } </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22<
相關推薦
Caffe中權值是怎麼更新的
網址:http://blog.csdn.net/mounty_fsc/article/details/51588773 (Caffe,LeNet)權值更新(七) 在Solver::ApplyUpdate()函式中,根據反向傳播階段計算的loss關於網路
神經網絡中權值初始化的方法
網絡 mac tro 推導 6.4 linear diff ati soft from:http://blog.csdn.net/u013989576/article/details/76215989 權值初始化的方法主要有:常量初始化(constant)、高斯分布初始化(
Oracle:用其他表中的值更新
CREATE TABLE TB1 ( SYSNO INT, VAL1 VARCHAR2(2), VAL2 VARCHAR2(2) ) CREATE TABLE TB2 ( SYSNO2 INT, VAL3 VARCHAR2(2), VAL4 VARCHAR2(2
Tensorflow中權值和feature map的視覺化
前言 Tensorflow中可以使用tensorboard這個強大的工具對計算圖、loss、網路引數等進行視覺化。本文並不涉及對tensorboard使用的介紹,而是旨在說明如何通過程式碼對網路權值和feature map做更靈活的處理、顯示和儲存。本文的相關
對 caffe 中Xavier, msra 權值初始化方式的解釋
If you work through the Caffe MNIST tutorial, you’ll come across this curious line weight_filler { type: "xavier" } and the acc
【bzoj21115 [Wc2011] Xor 帶全無向圖中1道n經過路徑權值的最大異或和(含有環)】
這道題要求從1到n的最大xor和路徑,存在重邊,允許經過重複點、重複邊。 第一行包含兩個整數N和 M, 表示該無向圖中點的數目與邊的數目。 接下來M 行描述 M 條邊,每行三個整數Si,Ti ,Di,表示 Si 與Ti之間存在 一條權值為 Di的無向邊。 圖中可能有重邊或自環。 輸出:僅包含
caffe權值及featureMap視覺化
1、權值視覺化 主函式 conv1_weights_vis.m,放在caffe根目錄,需要matcaffe clear; clc; close all; addpath('matlab') caffe.set_mode_cpu(); fprintf(['Caffe Ver
深度學習框架Caffe-權值視覺化[重啟]
配置 ubuntu16.04 Matlab2018b gcc6.3 (安裝教程): 安裝ubuntu16.04所遇到的問題 https://blog.csdn.net/baidu_40840693/article/details/85061079 安裝方面和下面的部落格一樣:
根據後序中序輸出樹並且求解路徑權值和最小的葉子結點
題目描述: 給一顆點帶權(權值均為正整數並且小於10000)的二叉樹的中序和後序遍歷,找一個葉子是的它到根的路徑上的權和最小。如果有多解,輸出葉子權最小的那個。輸入樣例兩行, 第一行為中序遍歷,第二行為後序遍歷,輸出葉子結點。樣例輸入:3 2 1 4 5 7 6 3 1 2
caffe權值視覺化,特徵視覺化,網路模型視覺化
-------------------------------------------------------------------------------- 權值視覺化 對訓練後的網路權值進行視覺化可以判斷模型的優劣及是否欠(過)擬合。經過良好訓練的網路權值通常表現為美
HNUM1370: 巍巍嶽麓解題報告---(所有生成樹情況中最大邊權值的最小值)
題目描述 嶽麓山風景區位於湖南省長沙市嶽麓區,佔地面積 35.20 平方公里,是南嶽衡山 72 峰的最後一峰,位於 橘子洲旅遊景區內,為城市山嶽型風景名勝區,是中國四大賞楓勝地之一。 嶽麓山位於首
SQL不同伺服器資料庫之間資料操作(當在一個伺服器的某張表中有資料更新時,將更新值通過觸發器插入到另一個伺服器的指定表中)
第一步:在建立觸發器的伺服器上建立連結伺服器 建立連結伺服器有兩種方法:1.通過SQL語言建立,2.通過資料庫管理工具建立,下面分別進行詳細介紹: 1.通過SQL語言建立 通過SQL語言建立連結伺服器方法 2.通過資料庫管理工具建立(這裡以SQL SER
51Nod 1110 距離之和最小 V3(中位數+權值轉化為個數)
基準時間限制:1 秒 空間限制:131072 KB 分值: 40 難度:4級演算法題 X軸上有N個點,每個點除了包括一個位置資料X[i],還包括一個權值W[i]。點P到點P[i]的帶權距離 = 實際距
hiho1576 子樹中的最小權值【dfs序】
題意:求以x為根的子樹中的最小權值 思路:dfs序,把樹轉化成一個序列,類似LCA中的轉化,記錄1棵子樹進去的時間戳和出去的時間戳。線段樹求區間最小值 #include<stdio.h> #include<iostream> #include&l
神經網路例程-梯度下降法更新權值
以下程式碼來自Deep Learning for Computer Vision with Python第九章。 一、梯度下降法(Gradient Decent) # import the necessary packages from sklearn.model_s
梯度下降法更新權值理論
使用3層的神經網路(包含輸入層和輸出層)來演示是如何工作的。 網路:input 3個節點;hidden 3個節點;output 3個節點 引數:input:矩陣是3*1的矩陣;為3*3的矩陣;為3*3的矩陣;output:矩陣為3*1的矩陣 計算hidden層節點的矩陣
對一般分類CNN的FC2層中的權值W的一點兒思考
最近又重新看了L-Softmax Loss 和 A-Softmax Loss.對對一般分類CNN的FC2層中的權值W,有了自己的一點想法,與大家分享一下。如果大家對我提出的第6,7的兩個問題,有自己的想法,希望給我留言,大家相互學習。 郵箱[email
將tensorflow網路模型(圖+權值)儲存為.pb檔案,並從.pb檔案中還原網路模型
工程結構如下: 將網路模型(圖+權值)儲存為.pb檔案 write.py # -*- coding: utf-8 -*- from __future__ import absolute_import, unicode_literals from tensorflow.
BP神經網路,BP推導過程,反向傳播演算法,誤差反向傳播,梯度下降,權值閾值更新推導,隱含層權重更新公式
%% BP的主函式 % 清空 clear all; clc; % 匯入資料 load data; %從1到2000間隨機排序 k=rand(1,2000); [m,n]=sort(k); %輸入輸出資料 input=data(:,2:25); output1 =d
P1351 聯合權值
https clas 我們 tps a13 pre 水題 open space 聯合權值 然而這只是一道普及+/提高的大水題 洛谷鏈接 這道題是2014年提高組day1的第二題。 簡單題意就是在樹上每個點都有權值,相鄰兩點的距離為1,求距離為2的點的權值乘積的和以及最大值。