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
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.
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)