我正在尝试通过2D矩阵乘以3D张量,但是有一个未知的维度。 我在这里检查了所有相关帖子,但没有找不到我想要的内容。
我有这些参数:
T形(M,N)
L形(?,M,M)
F - 形状(?,N)
我想用输出形状(?,M)进行乘法L * T * F.
我尝试扩展尺寸等。
不幸的是,我总是输了? - 维度。
感谢您的任何建议。
答案 0 :(得分:0)
你可以这样做。
L --> [?, M, M]
T --> [M, N]
tensordot(L,T) axes [[2], [0]] --> [?,M, N]
F --> [?, N] --> expand axis --> [?, N, 1]
matmul [?, M, N], [?, N, 1] --> [?, M, 1] --> squeeze --> [?, M]
放在一起:
tf.squeeze(tf.matmul(tf.tensordot(L,T, axes=[[2],[0]]),F[...,None]))
答案 1 :(得分:0)
作为一名学习者,我发现问题和答案相当神秘。所以我为自己简化了。
import tensorflow as tf
L = tf.placeholder(tf.float32, shape=[None, 5, 5])
T = tf.placeholder(tf.float32, shape=[ 5, 10])
F = tf.placeholder(tf.float32, shape=[ None, 10])
print ((tf.tensordot(L,T, axes=[[2],[0]])).get_shape)
# This is more cryptic. Not really sure.
#print(F[...,None].get_shape)
print( tf.expand_dims(F,2).get_shape)
finaltensor = tf.matmul(tf.tensordot(L,T, axes=[[2],[0]]),F[...,None])
print (finaltensor.get_shape)
squeezedtensor = tf.squeeze(finaltensor)
print (tf.shape(squeezedtensor))
除最后一行外,所有打印的内容都清晰。
<bound method Tensor.get_shape of <tf.Tensor 'Tensordot:0' shape=(?, 5, 10) dtype=float32>>
<bound method Tensor.get_shape of <tf.Tensor 'ExpandDims:0' shape=(?, 10, 1) dtype=float32>>
<bound method Tensor.get_shape of <tf.Tensor 'MatMul:0' shape=(?, 5, 1) dtype=float32>>
Tensor("Shape:0", shape=(?,), dtype=int32)