为什么我的稀疏张量不能转换为张量

问题描述

我想将稀疏张量作为简单的基于张量流的递归神经网络的输入。为此,我使用以下代码

model = keras.Sequential()
model.add(keras.Input(shape=(1,features_dim),sparse=True))
model.add(keras.layers.RNN(keras.layers.SimpleRNNCell(hidden_layer_dim,activation="sigmoid")))
model.add(keras.layers.Dense(labels_dim,activation='softmax'))

model.compile(optimizer=keras.optimizers.SGD(lr=learning_rate,momentum=0.0,decay=0.0,nesterov=False),loss='sparse_categorical_crossentropy',metrics=[keras.metrics.SparseCategoricalAccuracy()])

model.fit(
      training_data,training_labels,epochs=num_epochs,batch_size=batch_size,shuffle=True
    )

features_dim表示数字特征,training_labels是包含相应标签的NumPy数组,training_data是由COO格式的稀疏矩阵创建的稀疏张量,形状为([num_entries,1, num_features])。

但是,当我尝试运行此命令时,出现此错误

TypeError:无法将类型的对象转换为Tensor。内容:SparseTensor(indices = Tensor(“ cond_1 / Identity:0”,shape =(None,3),dtype = int64,device = / job:localhost / replica:0 / task:0 / device:cpu:0), values = Tensor(“ cond_1 / Identity_1:0”,shape =(None,),dtype = float64,device = / job:localhost / replica:0 / task:0 / device:cpu:0),density_shape = Tensor(“ stack:0“,shape =(3,),dtype = int64,device = / job:localhost / replica:0 / task:0 / device:cpu:0)。考虑将元素强制转换为受支持的类型。

我对这个错误有点迷茫。我给人的印象是TensorFlow可以处理稀疏数据而无需进行转换。此外,如果有必要进行转换,我不确定为什么会失败。如果我使用tf.sparse.to_dense()手动转换,我可以运行上面的代码(没有sparse = True)很好。因此,我从coo-matrix来创建sparsetensor的方式似乎没有什么问题(至少据我所知)。

编辑:

我现在已经测试了提供的答案 Using sparse matrices with Keras and Tensorflow。不幸的是,它们都没有解决我的问题而没有牺牲至少一批的稀疏性。没有其他可能性了吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)