J'ai un tenseur 2D A avec la forme de (?, L) qui fait référence aux caractéristiques obtenues via le réseau de neurones (où '?' est la taille du lot ), et un tenseur 3D B avec la forme de (N, K, L). Évidemment, il existe N tableaux avec la forme de (K, L) dans B, qui sont appelés < strong>C ici.

Maintenant, comment puis-je calculer la distance euclidienne moyenne (moyenne de la distance d'une rangée de A et de chaque rangée de C) entre chaque rangée de A et tous les C sans itérations de toutes les lignes dans A et C, et renvoient enfin un vecteur avec la forme de (?, N) ?

Par exemple, lorsque le A de forme (1, L), le résultat peut être obtenu comme suit :

import tensorflow as tf

with tf.Graph().as_default(), tf.Session() as sess:
    A = tf.placeholder(tf.float32, [1, None])
    B = tf.placeholder(tf.float32, [None, None, None])
    dist = tf.reduce_mean(tf.norm(B - A, axis=2), axis=1)
    print(sess.run(dist, feed_dict={A: [[1, 2, 3]],
                                    B: [[[ 4,  5,  6], [ 7,  8,  9]],
                                        [[10, 11, 12], [13, 14, 15]]]}))
    # [ 7.7942286 18.186533 ]

Je veux savoir que lorsque A = ([[1, 2, 3], [4, 5, 6]]) (c'est juste un exemple de A avec la forme de (2, 3 )), comment puis-je obtenir le résultat de la question ci-dessus avec la forme de [2, 2] ?

1
Bobo Xi 16 mars 2019 à 14:23

2 réponses

Meilleure réponse

Le problème a été résolu comme suit :

import tensorflow as tf

with tf.Graph().as_default(), tf.Session() as sess:
    a = tf.placeholder(tf.float32, [None, None])
    b = tf.placeholder(tf.float32, [None, None, None])
    a_exp = tf.expand_dims(tf.expand_dims(a, 1), 1)
    dist = tf.reduce_mean(tf.norm(b - a_exp, axis=3), axis=2)
    print(sess.run(dist, feed_dict={a: [[1, 2, 3], [4, 5, 6]],
                                    b: [[[ 4,  5,  6], [ 7,  8,  9]],
                                        [[10, 11, 12], [13, 14, 15]]]}))
    # [[ 7.7942286 18.186533 ]
    #  [ 2.598076  12.990381 ]]
0
Bobo Xi 19 mars 2019 à 02:52
import tensorflow as tf

with tf.Graph().as_default(), tf.Session() as sess:
    A = tf.placeholder(tf.float32, [1, None])
    B = tf.placeholder(tf.float32, [None, None, None])
    newA = tf.expand_dims(A, 0)
    dist = tf.reduce_mean(tf.norm(B - newA, axis=2), axis=1)
    print(sess.run(dist, feed_dict={A: [[1, 2, 3]],
                                    B: [[[ 4,  5,  6], [ 7,  8,  9]],
                                        [[10, 11, 12], [13, 14, 15]]]}))
0
pyy 18 mars 2019 à 09:56