TensorFlow conv2d實現卷積

2022-08-24 08:15:12 字數 1908 閱讀 3941

tf.nn.conv2d是tensorflow裡面實現卷積的函式,參考文件對它的介紹並不是很詳細,實際上這是搭建卷積神經網路比較核心的乙個方法,非常重要

除去name引數用以指定該操作的name,與方法有關的一共五個引數

第乙個引數input:指需要做卷積的輸入影象,它要求是乙個tensor,具有[batch, in_height, in_width, in_channels]這樣的shape,具體含義是[訓練時乙個batch的數量, 高度, 寬度, 影象通道數],注意這是乙個4維的tensor,要求型別為float32和float64其中之一

第二個引數filter:相當於cnn中的卷積核,它要求是乙個tensor,具有[filter_height, filter_width, in_channels, out_channels]這樣的shape,具體含義是[卷積核的高度,卷積核的寬度,影象通道數,卷積核個數

],要求型別與引數input相同,有乙個地方需要注意,第三維in_channels,就是引數input的第四維

第三個引數strides:卷積時在影象每一維的步長,這是乙個一維的向量,長度4

第四個引數padding:string型別的量,只能是"same","valid"其中之一,這個值決定了不同的卷積方式(後面會介紹)

第五個引數:use_cudnn_on_gpu:bool型別,是否使用cudnn加速,預設為true

結果返回乙個tensor,這個輸出,就是我們常說的feature map

import

tensorflow as tf

input =tf.variable([

[1.0, 2.0, 3.0, 4.0],

[5.0, 6.0, 7.0, 8.0],

[8.0, 7.0, 6.0, 5.0],

[4.0, 3.0, 2.0, 1.0]])

input=tf.reshape(input,[1,4,4,1])

filter = tf.variable(tf.random_normal([2,2,1,1]))

op = tf.nn.conv2d(input, filter, strides=[1, 1, 1, 1], padding='

valid')

init=tf.global_variables_initializer()

with tf.session() as sess:

sess.run(init)

print

(sess.run(input))

print

(sess.run(op))

sess.close()

s輸出結果:

[[[[ 1.]

[ 2.]

[ 3.]

[ 4.]]

[[ 5.]

[ 6.]

[ 7.]

[ 8.]]

[[ 8.]

[ 7.]

[ 6.]

[ 5.]]

[[ 4.]

[ 3.]

[ 2.]

[ 1.]]]]

[[[[ -5.89250851]

[ -7.98477077]

[-10.077034 ]]

[[-12.00638008]

[-12.8220768 ]

[-13.63777256]]

[[-12.93785667]

[-10.84559441]

[ -8.75333118]]]]

參考:

轉 A2W W2A T2A T2W 等巨集

如果你覺得使用 widechartomultibyte,multibytetowidechar 等函式比較麻煩 眾多的引數,緩衝區的分配與銷毀等。那麼可以使用 a2w w2a t2a t2w 等巨集來代替,它們對上面兩個函式進行了封裝。在使用這些巨集之前,應該包含標頭檔案 atlconv.h 並在呼...

2 基礎控制項2

transform 的預設值為 1,0,0,1,0,0 nslog nsstringfrom 可以列印其他型別的 比如類 affine transform a ffine transform 的初始化為 make make 只能改變一次 不可重複改變 如果想要重複改變 則使用去掉 make 的方法t...

什麼是P2P,O2O,B2B,B2C,C2C模式

最近網際網路行業各種to的模式搞得人暈頭轉向,我也是在這整理一下,防止在聽別人裝b的時候對答不流 p2p peer to peer 對等網路 可以簡單的定義成通過直接交換來共享計算機資源和服務,而對等計算模型應用層形成的網路通常稱為對等網路。在p2p網路環境中,成千上萬臺彼此連線的計算機都處於對等的...