【TensorFlow】理解tf.nn.conv2d方法 ( 附程式碼詳解註釋 )
最近在研究學習TensorFlow,在做識別手寫數字的demo時,遇到了tf.nn.conv2d這個方法,查閱了官網的API 發現講得比較簡略,還是沒理解。google了一下,參考了網上一些朋友寫得部落格,結合自己的理解,差不多整明白了。
方法定義
tf.nn.conv2d (input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None, name=None)
引數:
- **input : ** 輸入的要做卷積的圖片,要求為一個張量,shape為 [ batch, in_height, in_weight, in_channel ],其中batch為圖片的數量,in_height 為圖片高度,in_weight 為圖片寬度,in_channel 為圖片的通道數,灰度圖該值為1,彩色圖為3。(也可以用其它值,但是具體含義不是很理解)
- filter: 卷積核,要求也是一個張量,shape為 [ filter_height, filter_weight, in_channel, out_channels ],其中 filter_height 為卷積核高度,filter_weight 為卷積核寬度,in_channel 是影象通道數 ,和 input 的 in_channel 要保持一致,out_channel 是卷積核數量。
- strides: 卷積時在影象每一維的步長,這是一個一維的向量,[ 1, strides, strides, 1],第一位和最後一位固定必須是1
- padding: string型別,值為“SAME” 和 “VALID”,表示的是卷積的形式,是否考慮邊界。"SAME"是考慮邊界,不足的時候用0去填充周圍,"VALID"則不考慮
- use_cudnn_on_gpu: bool型別,是否使用cudnn加速,預設為true
具體實現
import tensorflow as tf
# case 1
# 輸入是1張 3*3 大小的圖片,影象通道數是5,卷積核是 1*1 大小,數量是1
# 步長是[1,1,1,1]最後得到一個 3*3 的feature map
# 1張圖最後輸出就是一個 shape為[1,3,3,1] 的張量
input = tf.Variable(tf.random_normal([1,3,3,5]))
filter = tf.Variable(tf.random_normal([1,1,5,1]))
op1 = tf.nn.conv2d(input, filter, strides=[1,1,1,1], padding='SAME')
# case 2
# 輸入是1張 3*3 大小的圖片,影象通道數是5,卷積核是 2*2 大小,數量是1
# 步長是[1,1,1,1]最後得到一個 3*3 的feature map
# 1張圖最後輸出就是一個 shape為[1,3,3,1] 的張量
input = tf.Variable(tf.random_normal([1,3,3,5]))
filter = tf.Variable(tf.random_normal([2,2,5,1]))
op2 = tf.nn.conv2d(input, filter, strides=[1,1,1,1], padding='SAME')
# case 3
# 輸入是1張 3*3 大小的圖片,影象通道數是5,卷積核是 3*3 大小,數量是1
# 步長是[1,1,1,1]最後得到一個 1*1 的feature map (不考慮邊界)
# 1張圖最後輸出就是一個 shape為[1,1,1,1] 的張量
input = tf.Variable(tf.random_normal([1,3,3,5]))
filter = tf.Variable(tf.random_normal([3,3,5,1]))
op3 = tf.nn.conv2d(input, filter, strides=[1, 1, 1, 1], padding='VALID')
# case 4
# 輸入是1張 5*5 大小的圖片,影象通道數是5,卷積核是 3*3 大小,數量是1
# 步長是[1,1,1,1]最後得到一個 3*3 的feature map (不考慮邊界)
# 1張圖最後輸出就是一個 shape為[1,3,3,1] 的張量
input = tf.Variable(tf.random_normal([1,5,5,5]))
filter = tf.Variable(tf.random_normal([3,3,5,1]))
op4 = tf.nn.conv2d(input, filter, strides=[1, 1, 1, 1], padding='VALID')
# case 5
# 輸入是1張 5*5 大小的圖片,影象通道數是5,卷積核是 3*3 大小,數量是1
# 步長是[1,1,1,1]最後得到一個 5*5 的feature map (考慮邊界)
# 1張圖最後輸出就是一個 shape為[1,5,5,1] 的張量
input = tf.Variable(tf.random_normal([1,5,5,5]))
filter = tf.Variable(tf.random_normal([3,3,5,1]))
op5 = tf.nn.conv2d(input, filter, strides=[1, 1, 1, 1], padding='SAME')
# case 6
# 輸入是1張 5*5 大小的圖片,影象通道數是5,卷積核是 3*3 大小,數量是7
# 步長是[1,1,1,1]最後得到一個 5*5 的feature map (考慮邊界)
# 1張圖最後輸出就是一個 shape為[1,5,5,7] 的張量
input = tf.Variable(tf.random_normal([1,5,5,5]))
filter = tf.Variable(tf.random_normal([3,3,5,7]))
op6 = tf.nn.conv2d(input, filter, strides=[1, 1, 1, 1], padding='SAME')
# case 7
# 輸入是1張 5*5 大小的圖片,影象通道數是5,卷積核是 3*3 大小,數量是7
# 步長是[1,2,2,1]最後得到7個 3*3 的feature map (考慮邊界)
# 1張圖最後輸出就是一個 shape為[1,3,3,7] 的張量
input = tf.Variable(tf.random_normal([1,5,5,5]))
filter = tf.Variable(tf.random_normal([3,3,5,7]))
op7 = tf.nn.conv2d(input, filter, strides=[1, 2, 2, 1], padding='SAME')
# case 8
# 輸入是10 張 5*5 大小的圖片,影象通道數是5,卷積核是 3*3 大小,數量是7
# 步長是[1,2,2,1]最後每張圖得到7個 3*3 的feature map (考慮邊界)
# 10張圖最後輸出就是一個 shape為[10,3,3,7] 的張量
input = tf.Variable(tf.random_normal([10,5,5,5]))
filter = tf.Variable(tf.random_normal([3,3,5,7]))
op8 = tf.nn.conv2d(input, filter, strides=[1, 2, 2, 1], padding='SAME')
init = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init)
print('*' * 20 + ' op1 ' + '*' * 20)
print(sess.run(op1))
print('*' * 20 + ' op2 ' + '*' * 20)
print(sess.run(op2))
print('*' * 20 + ' op3 ' + '*' * 20)
print(sess.run(op3))
print('*' * 20 + ' op4 ' + '*' * 20)
print(sess.run(op4))
print('*' * 20 + ' op5 ' + '*' * 20)
print(sess.run(op5))
print('*' * 20 + ' op6 ' + '*' * 20)
print(sess.run(op6))
print('*' * 20 + ' op7 ' + '*' * 20)
print(sess.run(op7))
print('*' * 20 + ' op8 ' + '*' * 20)
print(sess.run(op8))
# 執行結果
******************** op1 ********************
[[[[ 0.78366613]
[-0.11703026]
[ 3.533338 ]]
[[ 3.4455981 ]
[-2.40102 ]
[-1.3336506 ]]
[[ 1.9816184 ]
[-3.3166158 ]
[ 2.0968733 ]]]]
******************** op2 ********************
[[[[-4.429776 ]
[ 4.1218996 ]
[-4.1383405 ]]
[[ 0.4804101 ]
[ 1.3983132 ]
[ 1.2663789 ]]
[[-1.8450742 ]
[-0.02915052]
[-0.5696235 ]]]]
******************** op3 ********************
[[[[-6.969367]]]]
******************** op4 ********************
[[[[ -2.9217496 ]
[ 4.4683943 ]
[ 7.5761824 ]]
[[-14.627491 ]
[ -5.014709 ]
[ -3.4593797 ]]
[[ 0.45091882]
[ 4.8827124 ]
[ -9.658895 ]]]]
******************** op5 ********************
[[[[-2.8486536 ]
[ 1.3990458 ]
[ 2.953944 ]
[-6.007198 ]
[ 5.089696 ]]
[[-0.20283715]
[ 2.4726171 ]
[ 6.2137847 ]
[-0.38609552]
[-1.8869443 ]]
[[ 7.7240233 ]
[10.6962805 ]
[-3.1667676 ]
[-3.6487846 ]
[-2.2908094 ]]
[[-9.00223 ]
[ 4.5111785 ]
[ 2.5615098 ]
[-5.8492236 ]
[ 1.7734764 ]]
[[ 2.3674765 ]
[-5.9122458 ]
[ 5.867611 ]
[-0.50353 ]
[-4.890904 ]]]]
******************** op6 ********************
[[[[-4.06957626e+00 5.69651246e-01 2.97890633e-01 -5.08075190e+00
2.76357365e+00 -7.34121323e+00 -2.09436584e+00]
[-9.03515625e+00 -8.96854973e+00 -4.40316677e+00 -3.23745847e+00
-3.56242275e+00 3.67262197e+00 2.59603453e+00]
[ 1.25131302e+01 1.30267200e+01 2.25630283e+00 3.31285048e+00
-1.00396938e+01 -9.06786323e-01 -7.20120049e+00]
[-3.18641067e-01 -7.66135693e+00 5.02029419e+00 -1.65469778e+00
-5.53000355e+00 -4.76842117e+00 4.98133230e+00]
[ 3.68885136e+00 2.54145473e-01 -4.17096436e-01 1.20136106e+00
-2.29291725e+00 6.98313904e+00 4.92819786e-01]]
[[ 1.22962761e+01 3.85902214e+00 -2.91524696e+00 -6.89016438e+00
3.35520816e+00 -1.85112596e+00 5.59113741e+00]
[ 2.99087334e+00 4.42690086e+00 -3.34755349e+00 -7.41521478e-01
3.65099478e+00 -2.84761238e+00 -2.74149513e+00]
[-9.65088654e+00 -4.91817188e+00 3.82093906e+00 -5.72443676e+00
1.43630829e+01 5.11133957e+00 -1.18163595e+01]
[ 1.69606721e+00 -1.00837049e+01 9.65112305e+00 3.48559356e+00
4.71356201e+00 -2.74463081e+00 -5.76961470e+00]
[-5.11555862e+00 1.06215849e+01 1.97274566e+00 -1.66155469e+00
5.40411043e+00 1.64753020e+00 -2.25898552e+00]]
[[ 3.20135975e+00 1.16082029e+01 6.35383892e+00 -1.22541785e+00
-7.81781197e-01 -7.39507914e+00 3.02070093e+00]
[ 3.37887239e+00 -3.17085648e+00 8.15050030e+00 9.17820644e+00
-5.42563820e+00 -1.06148596e+01 1.44039564e+01]
[ 6.06520414e+00 -6.89214110e-01 1.18828654e+00 6.44250536e+00
-3.90648508e+00 -7.45609093e+00 1.70780718e-02]
[-5.51369572e+00 -5.99862814e-01 -5.97459745e+00 5.03705800e-01
-4.89957094e-01 4.65023327e+00 6.97832489e+00]
[ 5.56566572e+00 3.15251064e+00 4.23309374e+00 4.58887959e+00
1.11150384e+00 1.56815052e-01 -2.64446616e+00]]
[[-3.47755957e+00 -2.51347685e+00 5.07092476e+00 -1.79448032e+01
1.23025656e+00 -7.04272604e+00 -3.11969209e+00]
[-3.64519453e+00 -2.48672795e+00 1.45192409e+00 -7.42938709e+00
7.32508659e-01 1.73417020e+00 -8.84127915e-01]
[ 4.80518007e+00 -1.00521259e+01 -1.47410703e+00 -2.73861027e+00
-6.11766815e+00 5.89801645e+00 7.41809845e+00]
[ 1.52897854e+01 3.40052223e+00 -1.17849231e-01 8.11421871e+00
-7.15329647e-02 -8.57025623e+00 -6.36894524e-01]
[-1.29184561e+01 -2.07097292e+00 6.51137114e+00 4.45195580e+00
6.51636696e+00 1.94592953e-01 7.76367307e-01]]
[[-7.64904690e+00 -4.64357853e+00 -5.09730625e+00 1.46977997e+00
-2.66898251e+00 6.18280554e+00 7.30443239e+00]
[ 3.74768376e-02 8.19200230e+00 -2.99126768e+00 -1.25706446e+00
2.82602859e+00 4.79209185e-01 -7.99170971e+00]
[-9.31276321e+00 2.71563363e+00 2.68426132e+00 -2.98767281e+00
2.85978794e-01 5.26730251e+00 -6.51313114e+00]
[-5.16205406e+00 -3.73660684e+00 -1.25655127e+00 -4.03212357e+00
-2.34876966e+00 3.49581933e+00 3.21578264e-01]
[ 4.80592680e+00 -2.01916337e+00 -2.70319057e+00 9.14705086e+00
3.14293051e+00 -5.12257957e+00 1.87513745e+00]]]]
******************** op7 ********************
[[[[ -5.3398733 4.176247 -1.0400615 1.7490227 -2.3762708
-4.43866 -2.9152555 ]
[ -6.2849035 2.9156108 2.2420614 3.0133455 2.697643
-1.2664369 2.2018924 ]
[ -1.7367094 -2.6707978 -4.823809 -2.9799473 -2.588249
-0.8573512 0.7243177 ]]
[[ 9.770168 -6.0919194 -7.755929 0.7116828 4.696847
-1.5403405 -10.603018 ]
[ -2.2849545 7.23973 0.06859291 -0.3011052 -7.885673
-4.7223825 -1.2202084 ]
[ -1.7584102 -0.9349402 1.8078477 6.8720684 11.548839
-1.3058915 1.785974 ]]
[[ 3.8749192 -5.9033284 1.3921509 -2.68101 5.386052
5.2535496 7.804141 ]
[ 1.9598813 -6.1589165 0.9447456 0.06089067 -3.7891803
-2.0653834 -2.60965 ]
[ -2.1243367 -0.9703847 1.5366316 5.8760977 -3.697129
6.050654 -0.01914603]]]]
******************** op8 ****************
相關推薦
【TensorFlow】理解tf.nn.conv2d方法 ( 附程式碼詳解註釋 )
最近在研究學習TensorFlow,在做識別手寫數字的demo時,遇到了tf.nn.conv2d這個方法,查閱了官網的API 發現講得比較簡略,還是沒理解。google了一下,參考了網上一些朋友寫得部落格,結合自己的理解,差不多整明白了。
方法定義
tf.nn.
TensorFlow函式之tf.nn.conv2d()(附程式碼詳解)
tf.nn.conv2d是TensorFlow裡面實現卷積的函式,是搭建卷積神經網路比較核心的一個方法。
函式格式:
tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu = Noen, name = Non
【TensorFlow】關於tf.nn.sparse_softmax_cross_entropy_with_logits()
tf.nn.sparse_softmax_cross_entropy_with_logits()這是一個TensorFlow中經常需要用到的函式。官方文件裡面有對它詳細的說明,傳入的logits為神經網路輸出層的輸出,shape為[batch_size,num_classes
【TensorFlow】理解 Estimators 和 Datasets
Estimators 和 Datasets
Datasets:建立一個輸入管道(input pipelines)來為你的模型讀取資料,在這個 pipelines 中你可以做一些資料預處理,儘量都使用 TensorFlow 自己的函式,即 tf 開頭的函式(
tensorflow學習:tf.nn.conv2d 和 tf.layers.conv2d
看了很多tensorflow卷積的例子,有的用了tf.nn.conv2d,有的用了tf.layers.conv2d,那麼這兩個究竟有啥不同呢?
tf.layers.conv2d(inputs, fi
怎麼理解tf.nn,conv2d(卷積神經網路)的影象通道數
其實"影象通道數"就是影象的xx,呵呵..,其實這裡的影象通道數其實是叫做“影象的色彩通道數”,還是來看例子理解吧!
如每一張圖片的大小為28*28*1,則表示圖片的大小為28*28的畫素,*1表示是黑白的,即為一個色彩通道
同理,28*28*3,則表示圖片的大小為28*2
【TensorFlow】Numpy常用函式彙總(附原始碼)
以下內容是我在學習Numpy時,寫的例項,每一個模組都可以執行,並比較不同函式之間的差別。import numpy as np#dtype 定義numpy的儲存型別(np.int np.float),預設是64'''#定義矩陣格式'''
spring-boot實戰【08】【轉】:Spring Boot屬性配置文件詳解
命令行 可見 str ear isp active 文件加載 junit4 實驗 相信很多人選擇Spring Boot主要是考慮到它既能兼顧Spring的強大功能,還能實現快速開發的便捷。我們在Spring Boot使用過程中,最直觀的感受就是沒有了原來自己整合Spring
【轉】Linux系統編程---dup和dup2詳解
系統 強調 操作 attach bsp ads 正常的 註意 tdi 正常的文件描述符:
在linux下,通過open打開以文件後,會返回一個文件描述符,文件描述符會指向一個文件表,文件表中的節點指針會指向節點表。看下圖:
打開文件的內核數據結構
dup和dup2兩
【轉】C#各個版本中的新增特性詳解
members 托管 分隔符 main 數據 logs ttr dot 提高 轉自:http://www.cnblogs.com/knowledgesea/p/6694979.html
序言
自從2000年初期發布以來,c#編程語言不斷的得到改進,使我們能夠更加清晰的編
android開發學習 ------- 【轉】 android中的單例模式 (詳解)
lan post tail -- and 使用 href details android開發 https://blog.csdn.net/u011418943/article/details/60139644 這篇文章 前因後果 都說出來了 ,值得學習。
htt
【python】 time模塊和datetime模塊詳解 【轉】
-a cond .com ima 封裝 基本 sta times %d 一、time模塊
time模塊中時間表現的格式主要有三種:
a、timestamp時間戳,時間戳表示的是從1970年1月1日00:00:00開始按秒計算的偏移量
b、struct_time時間
【轉】JDK的Parser來解析Java原始碼詳解
轉自:https://www.jb51.net/article/92989.htm
這篇文章主要介紹了JDK的Parser來解析Java原始碼的相關資料,需要的朋友可以參考下
在JDK中,自帶了一套相關的編譯API,可以在Java中發起編譯流程,解析Java原始檔然後獲取其語法樹,在JDK的
【OpenCV3】透視變換——cv::getPerspectiveTransform()與cv::warpPerspective()詳解
透視變換(Perspective Transformation)是將成像投影到一個新的視平面(Viewing Plane),也稱作投影對映(Projective Mapping)。如圖1,通過透視變換ABC變換到A'B'C'。
圖1 透視變換示意圖
【linux】linux命令:fdisk -l 顯示資訊詳解
目錄
一、fdisk -l
二、磁碟計算公式
三、參考博文
一、fdisk -l
fdisk -l
(1)Disk /dev/vda: 107.4 GB, 107374182400 bytes, 209715200 sectors
【Python】pandas軸旋轉stack和unstack用法詳解
摘要
前面給大家分享了pandas做資料合併的兩篇[pandas.merge]和[pandas.cancat]的用法。今天這篇主要講的是pandas的DataFrame的軸旋轉操作,stack和unstack的用法。
首先,要知道以下五點: 1.stack:將資料的列“旋轉”為行 2
【轉】Python3使用Django2.x的settings檔案詳解
# -*- coding:utf8 -*-
import os
# 專案路徑
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# 安全金鑰,預設隨機加密字串
SECRET_KE
【知識】UML類圖與類的關係詳解
在畫類圖的時候,理清類和類之間的關係是重點。類的關係有泛化(Generalization)、實現(Realization)、依賴(Dependency)和關聯(Association)。其中關聯又分為一般關聯關係和聚合關係(Aggregation),合成關係(Composition)。下面我們結合例項理解這
【轉】VirtualBox與VMware中的網路模式詳解
VirtualBox中有4中網路連線方式:
NAT
Bridged Adapter
Internal
Host-only Adapter
VMWare中有三種,其實他跟VMWare 的網路連線方式都是一樣概念,只是比VMWare多了Internal方式。
【Boost】boost庫中thread多執行緒詳解5——談談執行緒中斷
執行緒不是在任意時刻都可以被中斷的。如果將執行緒中函式中的sleep()睡眠等待去掉,那麼即使在主執行緒中呼叫interrupt()執行緒也不會被中斷。
thread庫預定義了若干個執行緒的中斷點,只有當執行緒執行到中斷點的時候才能被中斷,一個執行緒可以擁有任意多箇中斷點。