Skip to main content
 首页 » 编程设计

python之在tensorflow中放大张量

2024年10月17日23sky-heaven

我正在寻找一种 tensorflow python 方法来放大(调整大小)张量以沿两个轴将每个特征图中的每个元素加倍,例如:

 ([[1, 2, 3], 
   [4, 5, 6], 
   [7, 8, 9]]) 

=>

 ([[1, 1, 2, 2, 3, 3], 
   [1, 1, 2, 2, 3, 3], 
   [4, 4, 5, 5, 6, 6], 
   [4, 4, 5, 5, 6, 6], 
   [7, 7, 8, 8, 9, 9], 
   [7, 7, 8, 8, 9, 9]]) 

我看到了tf.tile和 tf.pad但我不知道如何使用这些方法来获得该结果。

感谢任何提示!

更新:

感谢 sygi 提供的有用提示,这里是使用 python3 内核在 jupyter notebook 中工作的独立于形状的解决方案:

import tensorflow as tf 
import numpy as np 
 
i = np.array([[1, 2, 3], 
              [4, 5, 6], 
              [7, 8, 9]]) 
 
j = np.array([[1,  2,  3,  4], 
              [5,  6,  7,  8], 
              [9, 10, 11, 12]]) 
 
k = np.array([[1, 2], 
              [3, 4], 
              [5, 6]]) 
 
a = tf.placeholder(tf.int64, shape=(None, None)) 
a_shape = tf.shape(a) 
 
b = tf.reshape(a, [a_shape[0], a_shape[1], 1]) 
c = tf.tile(b, [1, 1, 2]) 
d = tf.reshape(c, [a_shape[0], a_shape[1]*2]) 
 
e = tf.reshape(d, [a_shape[0], a_shape[1]*2, 1]) 
f = tf.tile(e, [1, 1, 2]) 
g = tf.transpose(f, [0, 2, 1]) 
 
h = tf.reshape(g, [a_shape[0]*2, a_shape[1]*2]) 
 
session = tf.InteractiveSession() 
session.run(tf.initialize_all_variables()) 
 
print(h.eval(feed_dict={a: i})) 
print(h.eval(feed_dict={a: j})) 
print(h.eval(feed_dict={a: k})) 
 
session.close() 

结果

[[1 1 2 2 3 3] 
 [1 1 2 2 3 3] 
 [4 4 5 5 6 6] 
 [4 4 5 5 6 6] 
 [7 7 8 8 9 9] 
 [7 7 8 8 9 9]] 
 
[[ 1  1  2  2  3  3  4  4] 
 [ 1  1  2  2  3  3  4  4] 
 [ 5  5  6  6  7  7  8  8] 
 [ 5  5  6  6  7  7  8  8] 
 [ 9  9 10 10 11 11 12 12] 
 [ 9  9 10 10 11 11 12 12]] 
 
[[1 1 2 2] 
 [1 1 2 2] 
 [3 3 4 4] 
 [3 3 4 4] 
 [5 5 6 6] 
 [5 5 6 6]] 

请您参考如下方法:

a = tf.convert_to_tensor([[1, 2, 3], 
                          [4, 5, 6], 
                          [7, 8, 9]]) 
b = tf.reshape(a, [3, 3, 1]) 
c = tf.tile(b, [1, 1, 2]) 
d = tf.reshape(c, [3, 6]) 
print(d.eval()) 
array([[1, 1, 2, 2, 3, 3], 
       [4, 4, 5, 5, 6, 6], 
       [7, 7, 8, 8, 9, 9]], dtype=int32) 
 
e = tf.reshape(d, [3, 6, 2]) 
f = tf.tile(e, [1, 1, 2]) 
g = tf.transpose(f, [0, 2, 1]) 
print(g.eval()) 
array([[[1, 1, 2, 2, 3, 3], 
        [1, 1, 2, 2, 3, 3]], 
 
       [[4, 4, 5, 5, 6, 6], 
        [4, 4, 5, 5, 6, 6]], 
 
       [[7, 7, 8, 8, 9, 9], 
        [7, 7, 8, 8, 9, 9]]], dtype=int32) 
 
h = tf.reshape(g, [6, 6]) 
print(h.eval()) 
array([[1, 1, 2, 2, 3, 3], 
       [1, 1, 2, 2, 3, 3], 
       [4, 4, 5, 5, 6, 6], 
       [4, 4, 5, 5, 6, 6], 
       [7, 7, 8, 8, 9, 9], 
       [7, 7, 8, 8, 9, 9]], dtype=int32) 

您可以使用以下方法获得 a 张量(如果已定义)的形状:

shape = a.get_shape().as_list()