python - 为什么我的稀疏张量不能转换为张量
问题描述
我想将一个稀疏张量作为输入提供给一个简单的基于 tensorflow 的递归神经网络。为此,我使用以下代码:
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:无法将 <class 'tensorflow.python.framework.sparse_tensor.SparseTensor'> 类型的对象转换为张量。内容: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), dense_shape=Tensor("堆栈:0",形状=(3,),dtype=int64,设备=/job:localhost/replica:0/task:0/device:CPU:0))。考虑将元素转换为支持的类型。
我对这个错误有点迷茫。我的印象是 TensorFlow 无需转换即可处理稀疏数据。此外,如果需要转换,我不确定它为什么会失败。如果我手动使用. _ tf.sparse.to_dense()
因此,我如何从 coo 矩阵创建稀疏张量似乎没有任何问题(至少据我所知)。
编辑:
我现在已经广泛测试了 使用 Keras 和 Tensorflow 使用稀疏矩阵中提供的答案。不幸的是,它们都没有解决我的问题而不牺牲至少批次的稀疏性。难道就没有其他可能了吗?
解决方案
推荐阅读
- reactjs - 反应:我怎样才能访问另一个函数返回?
- html - CSS Parallax overflow-y:scroll 让它消失
- vb.net - 加快我的功能 - 动态按钮创建 vb.net
- node.js - 将视频上传到 Instagram 企业帐户总是返回“媒体 ID 不可用”错误消息
- java - 架构公共更新而不是配置一个
- php - 如何创建 localhost 网站可以通过 mariadb 中的链接访问和显示的 pdf 目录?
- javascript - 在 Javascript 说明中使用指针事件进行捏合/缩放
- c# - C# 中的枚举如何选择数字类型的默认值(当没有给出标识符时)?
- java - 如果我有两个以上的实体,我是否需要在 Java Spring 中声明一个 entitymanagerfactory?
- java - 无法启动网络服务器;嵌套异常是 java.lang.IllegalStateException