1:定義卷積層的權重時候
def weight_variable(shape):
initial = tf.truncated_normal(shape, stddev=0.1)
return tf.variable(initial)
w_conv1 = weight_variable([5,5,1,32])
通俗說法:5*5的卷積來做運算,1代表的是處理的影象顏色通道只有1個,32指有32個卷積 即提取32個特徵
更通俗的說明:我們使用了32個filters,每乙個都有乙個大小為5*5的視窗。我們必須定義乙個tensor來儲存shape為[5,5,1,32]權重矩陣w:前兩個引數是視窗的大小,第三個引數是channel的數量。最後乙個定義了我們想使用多少個特徵
2:定義max_pooling層的時候
def max_pool_2x2(x):
return tf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,2,2,1],padding='same')
引數是四個,和卷積很類似:
第乙個引數value:需要池化的輸入,一般池化層接在卷積層後面,所以輸入通常是feature map,依然是[batch, height, width, channels]這樣的shape
第二個引數ksize:池化視窗的大小,取乙個四維向量,一般是[1, height, width, 1],因為我們不想在batch和channels
上做池化,所以這兩個維度設為了1
第三個引數strides:和卷積類似,視窗在每乙個維度上滑動的步長,一般也是[1, stride,stride
, 1]
第四個引數padding:和卷積類似,可以取'valid' 或者'same'
返回乙個tensor,型別不變,shape仍然是[batch, height, width, channels]
這種形式
3:每層和每層之間的權重設定關係
w_conv1 = weight_variable([5,5,1,32])
第乙個卷積層中,每個size都是5*5,然後因為影象channel是1(mnist是灰色影象 不是rgb格式),32是指由32個卷積,形成32層深的乙個輸出
因為上層有32個輸出,就相當於一幅影象是32個channel了,所以這塊第3個引數必須是32,64就代表有64個卷積
w_conv2 = weight_variable([5,5,32,64])
最後一層是全連線層的權重,7*7*64這應該是計算好了的,不是隨便寫,1024就說明全連線層輸出是1024個神經元,或者說是1024個特徵
w_fc1 = weight_variable([7*7*64, 1024])
4:tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=none, name=none)
input:是乙個tensor,代表的是要輸入到網路裡面做卷積的影象,他的shape是[batch_size, height, width, channels],代表的含義是[乙個batch的大小 bacth_size, 高度,寬度,是幾通道的 灰色影象是1通道 常見的影象都是3通道]
filter:是神經網路中的卷積核,提取特徵的一種媒介。他也必須是乙個tensor,他的shape是[height, width, channels, channels_out],具體的含義是[卷積核的高度,卷積核的寬,影象的通道數是多少 和前面的input對應,這樣的卷積核有多少個 有n個就會提取出來n個特徵]
strides:卷積時在影象每一維的步長,這是一維向量,長度是4,第乙個數字和最後乙個數字對應的是batch上和channel上,我們幾乎不會在這兩個維度上做什麼操作 所以取值都是1,這個
strides的取值一般是[1,height,width,1]
padding:取same的時候,卷積運算時會為了保證輸出size和原影象的size保持不變,會同時進行外圍補0,至於具體補多少0,是有這樣乙個公式。
p = (f-1)/2 p代表的是補0時候的圈數
具體的計算可以轉到這篇部落格中進行檢視21個專案完整深度學習-第一章核心卷積模型原始碼
地信GIS面試前的一些小知識點(整理)
它是隨著地理科學 計算機技術 遙感技術和資訊科學的發展而產生的一門科學。就應用而言,是對空間資料進行 組織 管理 分析 顯示 的系統。其實本質上它 的就是座標資訊的問題。資料採集 監測與編輯 資料處理與變換 矢柵轉換 製圖綜合 資料儲存與組織 向量和柵格模型 空間查詢與分析 空間檢索 空間拓撲 疊加...
C Primer Plus 知識點整理(一)
變數的命名不能以數字開頭 變數名中只能包含字母 下劃線和數字,不能有空格。變數名不能與標準資料庫的變數名衝突 盡量不要將下劃線作為第乙個字元 變數名區分大小,字元長度由編譯器決定。變數 常量 函式 語句塊等的名字都稱為識別符號 變數是可讀 寫的記憶體單元 常量是只可讀的記憶體單元 宣告指定了乙個變數...
linux c c 知識點整理 一
在c 中,申請動態記憶體是使用new和delete,這兩個關鍵字實際上是運算子,並不是函式。而在c中,申請動態記憶體則是使用malloc和free,這兩個函式是c的標準庫函式,使用它們必須包含stdlib.h,才能編譯通過。new delete和malloc free的相同之處在於,new和mall...