Python tensorflow:当张量';谁的第一个暗淡是无?

Python tensorflow:当张量';谁的第一个暗淡是无?,python,tensorflow,keras,tensorflow2.0,Python,Tensorflow,Keras,Tensorflow2.0,我有一个张量,它的形状是None,10。我想得到一个外积结果,其形状是None,100或None,10,10。这是我的密码: # output'shape is None,10 output = tf.keras.layers.Concatenate()(encoded_feature_list) # wrong cross_output = tf.keras.layers.Lambda(lambda x:tf.linalg.matmul(x,x,transpose_a=True))(outpu

我有一个张量,它的形状是
None,10
。我想得到一个外积结果,其形状是
None,100
None,10,10
。这是我的密码:

# output'shape is None,10
output = tf.keras.layers.Concatenate()(encoded_feature_list)
# wrong
cross_output = tf.keras.layers.Lambda(lambda x:tf.linalg.matmul(x,x,transpose_a=True))(output)
cross_output = tf.keras.layers.Flatten()(cross_output)
已经答复:

根据报告:

此外,通过轴=0支持外部产品

测试如下:

a=np.数组([1,2,3,4,5,6,7,8,9,10.0])
tf.tensordot(a,a,轴=0)
#得到

我提供的答案确实有答案,但不是即时答案

鉴于您在对@Meow Cat 2012的评论中给出的示例:

import tensorflow as tf
import numpy as np

a = np.array([[1,2,3.0],[4,5,6.0]]
res = tf.einsum('ki,kj->kij',a,a)
print(res.shape)  # TensorShape([2, 3, 3])
函数将计算两个张量的外积

另一个解决方案是(@DachuanZhao指出):


这回答了你的问题吗@大卫:不,不是。它的第一个dim不是
None
…这是coeerct dim=1,但是当dim=2时会得到错误的结果。当
a=np.array([[1,2,3.0],[4,5,6.0])
tf.tensordot(a,a,axes=0)
得到形状
(2,3,3)
,而不是
(2,3,3)或
(2,9)
是的,我找到了另一个解决方案:
(tf.expand_-dims(a,axis=-1),tf.expand_-dims(a,axis=1))
@DachuanZhao很酷,很高兴你成功了。我会将此解决方案添加到我的答案中,以供未来用户使用
import tensorflow as tf
import numpy as np
    
a = np.array([[1,2,3.0],[4,5,6.0]]
res = tf.linalg.matmul(tf.expand_dims(a, axis=-1),tf.expand_dims(a, axis=1))
print(res.shape)  # (2, 3, 3)