广播np.dot vs tf.matmul用于张量矩阵乘法(形状必须是等级2但是等级3错误)

时间:2017-12-25 13:59:25

标签: python numpy tensorflow matrix-multiplication tensor

假设我有以下张量:

X = np.zeros((3,201, 340))
Y = np.zeros((340, 28))

制作X,Y的点积是成功的numpy,并产生一个张量的形状(3,201,28)。 但是,对于tensorflow,我收到以下错误:Shape must be rank 2 but is rank 3 error ...

最小代码示例:

X = np.zeros((3,201, 340))
Y = np.zeros((340, 28))
print(np.dot(X,Y).shape) # successful (3, 201, 28)
tf.matmul(X, Y) # errornous

知道如何用tensorflow实现相同的结果吗?

2 个答案:

答案 0 :(得分:3)

由于您正在使用.state('customer.customerDetail', { url: '/customerdetail', templateUrl: 'views/customerDetail.html', controller: 'customerDetailCtrl', data: { pageTitle: 'Customer detail' }, params: { selectedCustomer: null, }, resolve: { loginRequired: loginRequired, loadPlugin: function ($ocLazyLoad) { return $ocLazyLoad.load([{ files: ['js/plugins/hammer/hammer.min.js'] }, { files: ['css/customerDetail.css'], cache: false, }, ]); } } }) ,因此使用tensorstensordot更好(性能更好)。 NumPy允许它(numpy.dot)通过降低性能在np.dot上工作,似乎tensors根本不允许它。

因此,对于NumPy,我们会使用np.tensordot -

tensorflow

对于np.tensordot(X, Y, axes=((2,),(0,))) ,它将与tf.tensordot -

一起使用
tensorflow

Related post to understand tensordot

答案 1 :(得分:1)

Tensorflow不允许将不同等级的矩阵乘以numpy。

为了解决这个问题,您可以重塑矩阵。这基本上铸造了一个矩阵,  比如说,通过“堆叠矩阵”将等级3排在第3位,而将其叠加在另一个之上。

你可以用这个: <img src='ArsenalU.jpg' onmouseover="this.src='Arsenal.png';" onmouseout="this.src='ArsenalU.png';" />

其中i,j和k是矩阵1的维数,k和l是矩阵2的维数。

取自here