函数原型:
tf.sparse_to_dense(
sparse_indices,
output_shape,
sparse_values,
default_value,
name=None)
除去name参数用以指定该操作的name,与方法有关的一共四个参数 :
第一个参数sparse_indices:稀疏矩阵中那些个别元素对应的索引值。
有三种情况:
sparse_indices是个数,那么它只能指定一维矩阵的某一个元素
sparse_indices是个向量,那么它可以指定一维矩阵的多个元素
sparse_indices是个矩阵,那么它可以指定二维矩阵的多个元素
第二个参数output_shape:输出的稀疏矩阵的shape
第三个参数sparse_values:个别元素的值。
分为两种情况:
sparse_values是个数:所有索引指定的位置都用这个数
sparse_values是个向量:输出矩阵的某一行向量里某一行对应的数(所以这里向量的长度应该和输出矩阵的行数对应,不然报错)
第四个参数default_value:未指定元素的默认值,一般如果是稀疏矩阵的话就是0了
常见用法:将output_shape定义为稀疏矩阵的维度
import tensorflow as tf
multi_one_hot = tf.sparse.SparseTensor(indices=[[0, 0], [0, 1], [2, 0],
[4, 0], [4, 1], [4, 2],
[4, 3]],
values=[30, 60, 15, 98, 9, 16, 15],
dense_shape=[5, 4])
one_hot = tf.constant([30, 20, 50, 65, 0])
inputs = [one_hot, multi_one_hot]
dense_multi = tf.compat.v1.sparse_to_dense(sparse_indices=inputs[1].indices,
output_shape=inputs[1].dense_shape,
sparse_values=inputs[1].values)
print("dense_multi:",dense_multi)
常见用法2:最后一维设置最大长度,使用padding的方式
import tensorflow as tf
multi_one_hot = tf.sparse.SparseTensor(indices=[[0, 0], [0, 1], [2, 0],
[4, 0], [4, 1], [4, 2],
[4, 3]],
values=[30, 60, 15, 98, 9, 16, 15],
dense_shape=[5, 4])
one_hot = tf.constant([30, 20, 50, 65, 0])
inputs = [one_hot, multi_one_hot]
dense_multi = tf.compat.v1.sparse_to_dense(sparse_indices=inputs[1].indices,
output_shape=[inputs[1].dense_shape[0], 10],
sparse_values=inputs[1].values)
print("dense_multi:",dense_multi)