2

我是TensorFlow中的新成員。我試圖在本文中實現global_context提取https://arxiv.org/abs/1506.04579,這實際上是整個特徵映射的平均匯聚,然後將1x1特徵映射覆制回原始大小。的說明是如下如何放大tensorflow中的張量(重複值)?

enter image description here

具體而言,預期操作以下。 輸入:[N,1,1,C]張量,其中N是批量大小,C是通道數 輸出:[N,H,W,C]張量,其中H,W是高度和寬度原始特徵圖的所有H * W值都與1x1輸入相同。

例如,

[[1, 1, 1] 
1 -> [1, 1, 1] 
    [1, 1, 1]] 

我不知道如何做到這一點使用TensorFlow。 tf.image.resize_images需要3個通道,並且tf.pad不能填充零以外的常量值。

回答

6

tf.tile可以幫助你

x = tf.constant([[1, 2, 3]]) # shape (1, 3) 
y = tf.tile(x, [3, 1]) # shape (3, 1) 
y_ = tf.tile(x, [3, 2]) # shape (3, 6) 

with tf.Session() as sess: 
    a, b, c = sess.run([x, y, y_]) 

>>>a 
array([[1, 2, 3]], dtype=int32) 
>>>b 
array([[1, 2, 3], 
     [1, 2, 3], 
     [1, 2, 3]], dtype=int32) 
>>>c 
array([[1, 2, 3, 1, 2, 3], 
     [1, 2, 3, 1, 2, 3], 
     [1, 2, 3, 1, 2, 3]], dtype=int32) 

tf.tile(input, multiples, name=None)
multiples意味着你要多少次在該軸重複
y_重複axis0 3倍
y重複axis0 3次,AXIS1 2次

您可能需要使用tf.expand_dim第一個

是的,它接受動態形狀

x = tf.placeholder(dtype=tf.float32, shape=[None, 4]) 
x_shape = tf.shape(x) 
y = tf.tile(x, [3 * x_shape[0], 1]) 

with tf.Session() as sess: 
    x_ = np.array([[1, 2, 3, 4]]) 
    a = sess.run(y, feed_dict={x:x_}) 
>>>a 
array([[ 1., 2., 3., 4.], 
     [ 1., 2., 3., 4.], 
     [ 1., 2., 3., 4.]], dtype=float32) 
+0

謝謝,我發現這點。是否可以使用tf.tile動態張量形狀?例如'tf.tile(input,[1,ori.get_shape()[1],ori.get_shape()[2],1])''。我不想解決網絡中的擴大費率問題。 – jackykuo

+0

是的,它接受動態形狀,增加新的例子 – xxi