tensorflow中的一个问题。 有两个张量
a=tf.placeholder(tf.float32, [None, 1])
b=tf.placeholder(tf.float32, [None, 1])
我可以用
tf.matmul(a,b,False,True)
得到像这样的张量
#[[a1b1 a1b2 a1b3 a1b4 …]
#[a2b1 a2b2 a2b3 a2b4 …]
#[a3b1 a3b2 a3b3 a3b4 …]
#…]
但现在,如果我想得到像这样的张量
#[[a1-b1 a1-b2 a1-b3 a1-b4 …]
#[a2-b1 a2-b2 a2-b3 a2-b4 …]
#[a3-b1 a3-b2 a3-b3 a3-b4 …]
#…]
或者
#[[tf.pow(a1,b1) tf.pow(a1,b2) tf.pow(a1,b3) tf.pow(a1,b4) …]
#[tf.pow(a2,b1) tf.pow(a2,b2) tf.pow(a2,b3) tf.pow(a2,b4) …]
#[tf.pow(a3,b1) tf.pow(a3,b2) tf.pow(a3,b3) tf.pow(a3,b4) …]
#…]
我该怎么做?
答案 0 :(得分:1)
您可以使用tensorflow broadcasting
功能:
#[[a1-b1 a1-b2 a1-b3 a1-b4 ...]
#[a2-b1 a2-b2 a2-b3 a2-b4 ...]
#[a3-b1 a3-b2 a3-b3 a3-b4 ...]
#...]
# Subtract a and b transpose
c = a - tf.transpose(b)
<强>输出:强>
#[[ 0. -1. -2. -3.]
#[ 1. 0. -1. -2.]
#[ 2. 1. 0. -1.]
#[ 3. 2. 1. 0.]]
# for input: a:[[1],[2],[3],[4]],b:[[1],[2],[3],[4]]
#[[tf.pow(a1,b1)tf.pow(a1,b2)tf.pow(a1,b3)tf.pow(a1,b4)...]
#[tf.pow(a2,b1)tf.pow(a2,b2)tf.pow(a2,b3)tf.pow(a2,b4)...]
#[tf.pow(a3,b1)tf.pow(a3,b2)tf.pow(a3,b3)tf.pow(a3,b4)...]
#...]
#form (i,j) index matrices and then apply tf.pow
i = tf.tile(a, [1, tf.shape(b)[0]])
j = tf.transpose(tf.tile(b, [1, tf.shape(a)[0]]))
power = tf.pow(i,j)
<强>输出:强>
# index i index j
#[[1., 1., 1., 1.], [[1., 2., 3., 4.]
#[2., 2., 2., 2.], [1., 2., 3., 4.]
#[3., 3., 3., 3.], [1., 2., 3., 4.]
#[4., 4., 4., 4.] [1., 2., 3., 4.]]
#Output
#[[ 1. 1. 1. 1.]
#[ 2. 4. 8. 16.]
#[ 3. 9. 27. 81.]
#[ 4. 16. 64. 256.]]