簡體   English   中英

3D SparseTensor 矩陣乘以 2D 張量:InvalidArgumentError:張量“a_shape”必須有 2 個元素 [Op:SparseTensorDenseMatMul]

[英]3D SparseTensor matrix multiplication with 2D Tensor :InvalidArgumentError: Tensor 'a_shape' must have 2 elements [Op:SparseTensorDenseMatMul]

嗨,我正在嘗試使用 2D 張量進行 3D SparseTensor 矩陣乘法。 這是一個玩具示例:

3D 張量矩陣與二維張量相乘

import tensorflow as tf
import numpy as np

a = np.array([[[1., 0., 2., 0.],
              [3., 0., 0., 4.]]])
b = (np.array([1., 2.])[:,np.newaxis]).T

a_t = tf.constant(a)
b_t = tf.constant(b)
    
tf.matmul(b_t,a_t)

<tf.Tensor: shape=(1, 1, 4), dtype=float64, numpy=array([[[7., 0., 2., 8.]]])>

3D SparseTensor 矩陣乘法與二維張量

import tensorflow as tf
import numpy as np

a = np.array([[[1., 0., 2., 0.],
              [3., 0., 0., 4.]]])
b = (np.array([1., 2.])[:,np.newaxis]).T

a_t = tf.constant(a)
b_t = tf.constant(b)

a_s = tf.sparse.from_dense(a_t)

tf.sparse.sparse_dense_matmul(b_t,a_s)

InvalidArgumentError: Tensor 'a_shape' must have 2 elements [Op:SparseTensorDenseMatMul]

你能幫我解決這個錯誤嗎?

文檔說密集矩陣的秩必須是 2。

將稀疏張量(或密集矩陣)(等級 2)“A”乘以密集矩陣

此 function 調用的第一個參數是:

稀疏張量(或稠密矩陣)A,秩為 2。

所以你可以做你想做的事,至少不是這樣。 似乎您並不真的需要三個維度,因為其中之一只是一個。 如果你把它擠出來,它會起作用:

a_t = tf.constant(tf.squeeze(a))
b_t = tf.constant(b)

a_s = tf.sparse.from_dense(a_t)

tf.sparse.sparse_dense_matmul(b_t,a_s)
<tf.Tensor: shape=(1, 4), dtype=float64, numpy=array([[7., 0., 2., 8.]])>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM