web-dev-qa-db-fra.com

Comment agrandir un tenseur (valeur en double) dans tensorflow?

Je suis nouveau dans TensorFlow. J'essaie d'implémenter l'extraction global_context dans cet article https://arxiv.org/abs/1506.04579 , qui est en fait un regroupement moyen sur l'ensemble de la carte des fonctionnalités, puis dupliquez la carte des fonctionnalités 1x1 vers la taille d'origine. L'illustration est comme ci-dessous

enter image description here

Plus précisément, l'opération attendue suit. entrée: [N, 1, 1, C] tenseur, où N est la taille du lot et C est le nombre de canaux de sortie: [N, H, W, C] tenseur, où H, W est la hauteur et la largeur de l'original carte des caractéristiques et toutes les valeurs H * W de la sortie sont les mêmes que l'entrée 1x1.

Par exemple,

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

Je ne sais pas comment faire cela en utilisant TensorFlow. tf.image.resize_images nécessite 3 canaux et tf.pad ne peut pas remplir une valeur constante autre que zéro.

9
jackykuo

tf.tile peut vous aider

x = tf.constant([[1, 2, 3]]) # shape (1, 3)
y = tf.tile(x, [3, 1]) # shape (3, 3)
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 signifie combien de fois vous voulez répéter dans cet axe
dans y répéter l'axe0 3 fois
dans y_ répéter axe0 3 fois et axe1 2 fois

vous devrez peut-être d'abord utiliser tf.expand_dim

oui il accepte la forme dynamique

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)
18
xxi