У меня есть два tensorflow объектов следующегоtensorflow: Как вычислить разницу L1 между партией (матрица размера B X DIM) и лексикой (матрица размера V X DIM)?
batch = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3,2], name='batch')
vocab = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0,1.0,2.0,3.0,4.0,5.0,6.0], shape=[6,2], name='vocab')
партии имеет 3 векторов, каждый из 2-й измерений. vocab имеет 6 векторов, каждый из которых имеет 2 измерения. Я хочу вычислить разницу L1 между всеми возможными парами векторов (генерируя 18 значений). , например. L1 [1,2] будет
|1-1|+|2-2|, |1-3|+|2-4|, |1-5|+|2-6|, |1-1|+|2-2|, |1-3|+|2-4|, |1-5|+|2-6|,
Как это сделать с помощью функций тензорного потока? Результирующая матрица может быть 6 X 3 (партия X vocab). Матричным умножением, по-видимому, является вычисление, которое будет генерировать ожидаемый порядок матрицы. Но есть ли способ переопределить основную операцию умножения матрицы? (т. е. переопределения компонентного умножения с абсолютным значением разности)?
Это может быть тема, связанная с трансляцией (например, в numpy). Вы можете проверить это: https://www.tensorflow.org/versions/r1.0/experimental/xla/broadcasting. Я еще не пробовал это (вы заметите, что это экспериментально). – 0Tech
Вы использовали 'tf.matmul' вместо' * '(что делает продукт Schur, как вы упомянули)? – drpng
@drpng, спасибо. Я попробовал, но это не сработало. – Trojosh