Как мне умножить каждый вектор в тензоре на каждый элемент вектора

#python #tensorflow #tensor #softmax

#python #тензорный поток #тензор #softmax

Вопрос:

Привет, так что я точно хочу, если у нас есть матрица W и вектор V, такие как:

 V=[1,2,3,4]
W=[[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1]]
  

мы должны получить результат:

 result=[[1,1,1,1],[2,2,2,2],[3,3,3,3],[4,4,4,4]]
  

Я нашел этот метод на веб-сайте:

 V = tf.constant([1,2,4], dtype=tf.float32)
W = tf.constant([[1,2,3,4],[1,2,3,4],[1,2,3,4]], dtype=tf.float32)
tf.multiply(tf.expand_dims(V,1),W)
## produce: [[1,2,3,4],[2,4,6,8],[4,8,12,16]] 
  

это именно то, что я хочу, но когда я реализую это в своей модели, он также включает размер пакета вектора, в результате чего возникает ошибка, такая

 with input shapes: [?,1,297], [?,297,300].
  

я предполагаю, что это та же ошибка, которую это может вызвать

 V = tf.constant([[1,2,4]], dtype=tf.float32)
W = tf.constant([[[1,2,3,4],[1,2,3,4],[1,2,3,4]]], dtype=tf.float32)
tf.multiply(tf.expand_dims(V,1),W)
  

Я хотел знать, какова стандартная процедура получения каждого элемента из выходного вектора softmax и умножения их как веса для каждого вектора в тензоре объектов

Ответ №1:

Я обнаружил, что с помощью

 V = tf.constant([[1,2,4]], dtype=tf.float32)
W = tf.constant([[[1,2,3,4],[1,2,3,4],[1,2,3,4]]], dtype=tf.float32)
h2=tf.keras.layers.multiply([W,tf.expand_dims(V,2)])
  

слой keras будет игнорировать часть размера пакета для нас, но мы должны изменить параметр expand dim, потому что нам все еще нужно учитывать размер пакета V перед загрузкой в слой.