TensorFlow(3)CNN中的函數(shù)

tf.nn.conv2d()函數(shù)

參數(shù)介紹:

tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None)

  • input:輸入?yún)?shù)姥闭,具有這樣的shape[batch, in_height, in_width, in_channels],分別是[batch張圖片, 每張圖片高度為in_height, 每張圖片寬度為in_width, 圖像通道為in_channels].

  • filter:濾波器捂贿,濾波器的shape為[filter_height, filter_width, in_channels, out_channels]逮光,分別對應(yīng)[濾波器高度, 濾波器寬度, 接受圖像的通道數(shù), 卷積后通道數(shù)]酥泞,其中第三個參數(shù) in_channels需要與input中的第四個參數(shù) in_channels一致.

  • strides:代表步長央串,其值可以直接默認一個數(shù)尖殃,也可以是一個四維數(shù)如[1,2,1,1]以故,則其意思是水平方向卷積步長為第二個參數(shù)2坦弟,垂直方向步長為1.

  • padding:代表填充方式护锤,參數(shù)只有兩種,SAME和VALID酿傍,SAME比VALID的填充方式多了一列烙懦,比如一個3*3圖像用2*2的濾波器進行卷積,當(dāng)步長設(shè)為2的時候赤炒,會缺少一列氯析,則進行第二次卷積的時候,VALID發(fā)現(xiàn)余下的窗口不足2*2會直接把第三列去掉莺褒,SAME則會填充一列掩缓,填充值為0.

  • use_cudnn_on_gpu:bool類型,是否使用cudnn加速遵岩,默認為true.

  • name:給返回的tensor命名你辣。給輸出feature map起名字.

例子:

一張3*3的圖片,元素如下:

* * *
0 3 6
1 4 7
2 5 8

卷積核為1個2*2的卷積尘执,如下:

* *
0 2
1 3

TensorFlow代碼(padding為SAME):

import tensorflow as tf
import numpy as np

g = tf.Graph()
with g.as_default() as g:
    input = tf.Variable(np.array(range(9), dtype=np.float32).reshape(1,3,3,1))
    filter = tf.Variable(np.array(range(4), dtype=np.float32).reshape(2,2,1,1))
    op = tf.nn.conv2d(input, filter, strides=[1, 1, 1, 1], padding='SAME')

with tf.Session(graph=g) as sess:
    sess.run(tf.global_variables_initializer())
    a,b,c = sess.run([input, filter, op])
    print(a)
    print(b)
    print(c)

輸出:

[[[[ 0.]
   [ 1.]
   [ 2.]]

  [[ 3.]
   [ 4.]
   [ 5.]]

  [[ 6.]
   [ 7.]
   [ 8.]]]]
[[[[ 0.]]

  [[ 1.]]]


 [[[ 2.]]

  [[ 3.]]]]
[[[[ 19.]
   [ 25.]
   [ 10.]]

  [[ 37.]
   [ 43.]
   [ 16.]]

  [[  7.]
   [  8.]
   [  0.]]]]

即卷積后的結(jié)果為:

* * *
19 37 7
25 43 8
10 16 0

如果padding為VALID舍哄,則輸出如下:

[[[[ 0.]
   [ 1.]
   [ 2.]]

  [[ 3.]
   [ 4.]
   [ 5.]]

  [[ 6.]
   [ 7.]
   [ 8.]]]]
[[[[ 0.]]

  [[ 1.]]]


 [[[ 2.]]

  [[ 3.]]]]
[[[[ 19.]
   [ 25.]]

  [[ 37.]
   [ 43.]]]]

即卷積后的結(jié)果為:

* *
19 37
25 43

tf.nn.max_pool()函數(shù)

tf.nn.max_pool(value, ksize, strides, padding, name=None)

參數(shù)是四個,和卷積函數(shù)很類似:

  • value:需要池化的輸入誊锭,一般池化層接在卷積層后面表悬,所以輸入通常是feature map,依然是[batch, height, width, channels]這樣的shape.

  • ksize:池化窗口的大小丧靡,取一個四維向量蟆沫,一般是[1, height, width, 1]籽暇,因為我們不想在batch和channels上做池化,所以這兩個維度設(shè)為了1.

  • strides:和卷積類似饭庞,窗口在每一個維度上滑動的步長戒悠,一般也是[1, stride,stride, 1].

  • padding:和卷積類似,可以取'VALID' 或者'SAME'.

返回一個Tensor但绕,類型不變救崔,shape仍然是[batch, height, width, channels]這種形式.

TensorFlow代碼:

import tensorflow as tf
import numpy as np

g = tf.Graph()
with g.as_default() as g:
    input = tf.Variable(np.array(range(9), dtype=np.float32).reshape(1,3,3,1))
    filter = tf.Variable(np.array(range(4), dtype=np.float32).reshape(2,2,1,1))
    op = tf.nn.conv2d(input, filter, strides=[1, 1, 1, 1], padding='SAME')
    pool = tf.nn.max_pool(op, [1,2,2,1], [1,1,1,1], padding='SAME')

with tf.Session(graph=g) as sess:
    sess.run(tf.global_variables_initializer())
    PL = sess.run(pool)
    print(PL)

輸出:

[[[[ 43.]
   [ 43.]
   [ 16.]]

  [[ 43.]
   [ 43.]
   [ 16.]]

  [[  8.]
   [  8.]
   [  0.]]]]
* * *
43 43 8
43 43 8
16 16 0

tf.nn.avg_pool()

計算方法: 計算非padding的元素的平均值

例子:

import tensorflow as tf
import numpy as np

g = tf.Graph()
with g.as_default() as g:
    input = tf.Variable(np.array(range(9), dtype=np.float32).reshape(1,3,3,1))
    filter = tf.Variable(np.array(range(4), dtype=np.float32).reshape(2,2,1,1))
    op = tf.nn.conv2d(input, filter, strides=[1, 1, 1, 1], padding='SAME')
    pool = tf.nn.avg_pool(op, [1,2,2,1], [1,1,1,1], padding='SAME')

with tf.Session(graph=g) as sess:
    sess.run(tf.global_variables_initializer())
    PL = sess.run(pool)
    print(PL)

輸出為:

[[[[31.  ]
   [23.5 ]
   [13.  ]]

  [[23.75]
   [16.75]
   [ 8.  ]]

  [[ 7.5 ]
   [ 4.  ]
   [ 0.  ]]]]
* * *
31 23.75 7.5
23.5 16.75 4.
13. 8. 0.

tf.nn.dropout()

tf.nn.dropout(x, keep_prob, noise_shape=None, seed=None, name=None)

  • x:輸入?yún)?shù)
  • keep_prob:保留比例惶看。 取值 (0,1] 捏顺。每一個參數(shù)都將按這個比例隨機變更
  • noise_shape:干擾形狀。 此字段默認是None纬黎,表示第一個元素的操作都是獨立幅骄,但是也不一定。比例:數(shù)據(jù)的形狀是shape(x)=[k, l, m, n]本今,而noise_shape=[k, 1, 1, n]拆座,則第1和4列是獨立保留或刪除,第2和3列是要么全部保留冠息,要么全部刪除挪凑。
  • seed:隨機數(shù)種子
  • name: 命名空間

tensorflow中的dropout就是:shape不變,使輸入tensor中某些元素按照一定的概率變?yōu)?逛艰,其它沒變0的元素變?yōu)樵瓉淼?/keep_prob.

dropout層的作用: 防止神經(jīng)網(wǎng)絡(luò)的過擬合

例子:

import tensorflow as tf

g = tf.Graph()
with g.as_default() as g:
    mat = tf.Variable(tf.ones([10,10]))
    dropout_mat = tf.nn.dropout(mat, keep_prob=0.5)

with tf.Session(graph=g) as sess:
    sess.run(tf.global_variables_initializer())
    output, dropout = sess.run([mat, dropout_mat])
    print(output)
    print(dropout)

輸出:

[[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]]
[[2. 0. 0. 0. 2. 0. 2. 2. 0. 2.]
 [0. 2. 0. 0. 2. 2. 0. 0. 0. 0.]
 [2. 2. 2. 0. 0. 2. 0. 2. 0. 0.]
 [2. 0. 0. 0. 2. 2. 2. 0. 2. 0.]
 [0. 2. 2. 0. 2. 2. 2. 2. 0. 2.]
 [2. 0. 0. 0. 2. 0. 0. 2. 0. 2.]
 [2. 2. 0. 2. 2. 0. 0. 0. 2. 2.]
 [2. 0. 0. 0. 0. 2. 0. 2. 0. 0.]
 [2. 2. 0. 0. 0. 0. 0. 2. 0. 0.]
 [2. 0. 2. 2. 2. 2. 0. 2. 0. 0.]]

tf.reshape()

shape里最多有一個維度的值可以填寫為-1躏碳,表示自動計算此維度

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市散怖,隨后出現(xiàn)的幾起案子菇绵,更是在濱河造成了極大的恐慌,老刑警劉巖镇眷,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咬最,死亡現(xiàn)場離奇詭異,居然都是意外死亡欠动,警方通過查閱死者的電腦和手機永乌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來具伍,“玉大人翅雏,你說我怎么就攤上這事⊙夭拢” “怎么了枚荣?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長啼肩。 經(jīng)常有香客問我橄妆,道長衙伶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任害碾,我火速辦了婚禮矢劲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘慌随。我一直安慰自己芬沉,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布阁猜。 她就那樣靜靜地躺著丸逸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪剃袍。 梳的紋絲不亂的頭發(fā)上黄刚,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天,我揣著相機與錄音民效,去河邊找鬼憔维。 笑死,一個胖子當(dāng)著我的面吹牛畏邢,可吹牛的內(nèi)容都是我干的业扒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼舒萎,長吁一口氣:“原來是場噩夢啊……” “哼程储!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起逆甜,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤虱肄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后交煞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咏窿,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年素征,在試婚紗的時候發(fā)現(xiàn)自己被綠了集嵌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡御毅,死狀恐怖根欧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情端蛆,我是刑警寧澤凤粗,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站今豆,受9級特大地震影響嫌拣,放射性物質(zhì)發(fā)生泄漏柔袁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一异逐、第九天 我趴在偏房一處隱蔽的房頂上張望捶索。 院中可真熱鬧,春花似錦灰瞻、人聲如沸腥例。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽燎竖。三九已至,卻和暖如春袍祖,著一層夾襖步出監(jiān)牢的瞬間底瓣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工蕉陋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拨扶。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓凳鬓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親患民。 傳聞我的和親對象是個殘疾皇子缩举,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容