我有一个向量x = <C elements>
。我想用矩阵Z = <C x C elements>
对它进行多重处理。这将给出<1xC>
矩阵(<C>
向量)的输出。
如果我只为每个样本提供一个样本,我可以将它们相乘。
但在培训期间,我有张量x = <NxC>
和Z = <NxCxC>
,其中'N'是我的小批量大小。在这种情况下如何实现上述计算。普通tf.matmul()
返回错误,抱怨维度。
ValueError: Shape must be rank 2 but is rank 3 for 'Channel/MatMul' (op: 'MatMul') with input shapes: [?,2], [?,2,2].
谢谢,
Vishnu Raj
答案 0 :(得分:0)
这是一种方法:
展开张量x
的最后一个维度。它的形状现在是(N, C)
。
将张量Z
和x
与广播相乘。结果张量的形状为(N, C, C)
。
对张量的最后一个维度求和。
例如:
import tensorflow as tf
N = 2
C = 3
Z = tf.ones((N, C, C)) # Shape=(N, C, C)
x = tf.reshape(tf.range(0, N*C, dtype=tf.float32), shape=(N, C)) # Shape=(N, C)
mul = tf.reduce_sum(Z * x[:, :, None], axis=-1) # Shape=(N, C)
with tf.Session() as sess:
print(sess.run(mul))