将Sparse Tensor转换为Dense Tensor时遇InvalidArgumentError求助
解决TensorFlow稀疏张量转稠密张量时的索引越界错误
错误原因很明确:你定义的稀疏张量里,索引[7,1]的行索引7超出了dense_shape=[5,6]的第一维度范围——稀疏张量的每个索引必须满足0 ≤ 索引值 < 对应维度的大小,这里第一维度是5,合法的行索引只能是0到4,7显然不符合要求。
有两种直接的解决方法:
方法1:修正索引到合法范围
把超界的[7,1]改成第一维度内的索引,比如[3,1],修改后的代码如下:
from tensorflow import sparse # 创建稀疏张量,修正索引 var_34 = sparse.SparseTensor(indices = [[1,3], [3, 1]], values = [11, 56], dense_shape = [5, 6]) # 转换为稠密张量 var_35 = sparse.to_dense(var_34) print(var_35)
运行后会得到符合(5,6)形状的稠密张量,指定位置的值为11和56,其余为0。
方法2:调整dense_shape适配索引
如果你的索引[7,1]是合理需求,那就把dense_shape的第一维度调整为≥8(因为索引从0开始,7对应的维度大小至少是8),比如改成[8,6],代码如下:
from tensorflow import sparse # 创建稀疏张量,调整dense_shape var_34 = sparse.SparseTensor(indices = [[1,3], [7, 1]], values = [11, 56], dense_shape = [8, 6]) # 转换为稠密张量 var_35 = sparse.to_dense(var_34) print(var_35)
这样转换后会得到形状为(8,6)的稠密张量,索引[1,3]和[7,1]位置的值分别为11和56,其余为0。
内容的提问来源于stack exchange,提问作者CyberViper Barrack
相关产品推荐
相关产品推荐

