import tensorflow as tf
with tf.Session() as sess:
with tf.variable_scope('masssdsms'):
a = tf.get_variable('a', [1000,24,128], dtype=tf.float32, initializer=tf.random_normal_initializer(stddev=0.1) )
b = tf.get_variable('b', [1000,15,128], dtype=tf.float32, initializer=tf.random_normal_initializer(stddev=0.1) )
Я хочу получить новый тензор с именем c
от a
и b
.
1000 - размер партии, а форма c
должна быть (1000,20, 10, 1)
. Для каждого экземпляра из a
и b
: ai
и bi
они оба являются двумерными тензорами.
Новый экземпляр ci
является результатом ai
и bi
и имеет 20 * 10 = 200
элементов, каждый элемент которого является точечным произведением ai и bi с 128-мерным измерением соответственно. Таким образом, в сумме получается 200 точечных произведений. CI больше похож на двухмерное изображение.
Как я могу инициализировать эту операцию?
Изменен:
Когда я использую используемые коды, операцию скалярное произведение следует заменить другой функцией, такой как расстояние по гассиану, расстояние по косинусу и т. Д., Которая является обозначением контакта на графике.
Поэтому мне нужен общий метод для этого.
Вот что я делаю, но я не уверен, что это эффективный способ сделать это:
with tf.Session() as sess:
with tf.variable_scope('masssdsms'):
a = tf.get_variable('a', [1000,24,128], dtype=tf.float32, initializer=tf.random_normal_initializer(stddev=0.1) )
b = tf.get_variable('b', [1000,15,128], dtype=tf.float32, initializer=tf.random_normal_initializer(stddev=0.1) )
i = 999 # for i in range(1000):
ai = tf.slice(a,[i,0,0],[1,-1,-1]) # (1,24,128)
bi = tf.slice(b,[i,0,0],[1,-1,-1]) # (1,15,128)
ci = contact_func(ai,bi) # (1,24,15)