1樓:毛路安
TensorFlow 版本:2.1.0
Anaconda 2019.10
在TensorFlow2.1.0版本中,padding的same卷積後尺寸是否不變由步長strides是否大於1決定。
對於轉置卷積和卷積,padding的『same』與『valid』中,輸入高寬(i),輸出高寬(o),步長(s),卷積核的高寬(k)(設定高寬相等都為k)滿足以下關係:
卷積:padding = 'same'時,o = i/s 向上取整
padding = 'valid'時, o = (i-k)/s + 1 向下取整
轉置卷積:
padding = 'same'時,o = i * s
pading = 'valid' 時, o = (i-1)*s+k
使用jupyter進行驗證:
import
tensorflow
astf
from
tensorflow.keras
import
layers
gpus=tf
.config
.experimental
.list_physical_devices
('GPU')if
gpus
:try
:for
gpuin
gpus:tf
.config
.experimental
.set_memory_growth
(gpu
,True
)except
RuntimeErrorase
:print(e
)# 卷積演算法時, padding = 『same』 o = i/s 向上取整a=
tf.random
.normal([4
,64,64
,3]model_1
=layers
.Conv2D(10
,kernel_size=3
,strides=2
,padding
='same')b
=model_1(a
)display(b
.shape
)# 卷積演算法時, padding = 『valid』 o = (i-k)/s + 1 向下取整
model_2
=layers
.Conv2D(10
,3,2
,padding
='same')c
=model_2(b
)dispaly(c
.shape
)# 轉置卷積演算法時, padding = 'valid' o = (i-1)*s + k
model_3
=layers
.Conv2DTranspose(10
,3,2
,padding
='valid')d
=model(c
)display(d
.shape
)# 轉置卷積演算法時, padding = 『same』 o = i * s
model_4
=layers
.Conv2DTranspose(10
,3,2
,padding
='same')e
=model_4(d
)display(e
.shape
)具體結果如下:
2樓:bjnanhai
唐突做一下解釋:在卷積核移動逐漸掃瞄整體圖時候,因為步長的設定問題,可能導致剩下未掃瞄的空間不足以提供給卷積核的,大小掃瞄比如有圖大小為5*5,卷積核為2*2,步長為2,卷積核掃瞄了兩次後,剩下乙個元素,不夠卷積核掃瞄了,這個時候就在後面補零,補完後滿足卷積核的掃瞄,這種方式就是same。如果說把剛才不足以掃瞄的元素位置拋棄掉,就是valid方式。
Tensorflow 中 Embedding 層為什麼要用矩陣乘來實現?
一棵有思想的韭菜 我的猜想是這樣的 用one hot matrix 乘 embedding matrix來選擇,對與GPU來說是非常高效的,如果用CPU就會慢很多,但是如果這個實現用的是你說的index定址,這就實打實的是線性時間來,有GPU也無法加速。 Chan Yu 引用一下官方1.14版本的文...
TensorFlow中的onehot有什麼作用,為什麼要使用onehot向量呢?
鄭文勳 考慮多類情況。非onehot,標籤是類似0 1 2 3.n這樣。而onehot標籤則是顧名思義,乙個長度為n的陣列,只有乙個元素是1.0,其他元素是0.0。例如在n為4的情況下,標籤2對應的onehot標籤就是 0.0 0.0 1.0 0.0 使用onehot的直接原因是現在多分類cnn網路...
tensorflow裡面name scope, variable scope等如何理解?
已登出 不逼逼,貼原始碼和注釋 還不懂你打死我 coding utf 8 import osimport sysimport time import reimport math import numpy asnp import pandas aspd import tensorflow astf p...