使用稀疏张量来填充TensorFlow中softmax层的占位符

4
有没有人成功地使用稀疏张量和TensorFlow进行文本分析?一切都准备就绪,我已经能够用numpy数组将feed_dict传递给Softmax层中的tf.Session,但是我无法使用SparseTensorValues来传递字典。
我没有找到有关如何使用稀疏矩阵训练Tensor Flow模型(例如softmax)的文档,这很奇怪,因为类SparseTensorSparseTensorValuesTensorFlow.sparse_to_dense方法都已经准备就绪了,但是在session.run(fetches,feed_dict=None)方法中如何传递feed_dict字典的值却没有文档说明。
非常感谢。

1
我遇到了同样的问题并提交了一个问题。你可以关注这个问题,但我认为还没有解决。https://github.com/tensorflow/tensorflow/issues/342Ebrevdo建议使用embedding_lookup_sparse进行稀疏矩阵乘法。就我个人而言,我认为tensorflow目前支持有限的稀疏操作。 - user5614030
1个回答

2
我找到了一种方法,可以将稀疏图像放入TensorFlow中,并支持批量处理。我创建了一个4-d的稀疏矩阵字典,其中维度为batchSize、xLen、yLen、zLen(例如,zLen为3表示颜色)。以下伪代码是针对50个32x96像素3色图像的一批数据。每个像素的强度值都在数值上表示。在下面的片段中,我展示了初始化第一批的前2个像素...
shape = [50, 32, 96, 3]
indices = [[0, 20, 31, 0],[0, 22, 33, 1], etc...]
values = [12, 24, etc...]
batch = {"indices": indices, "values": values, "shape": shape}

在设置计算图时,我会创建一个正确维度的稀疏占位符。

images = tf.sparse_placeholder(tf.float32, shape=[None, 32, 96, 3])

'None'被用来可以改变批量大小。

当我首次想要使用图像时,例如将其馈入批量卷积中,我会将它们转换回密集张量:

images = tf.sparse_tensor_to_dense(batch) 

当我准备运行会话时,例如进行培训,我将批处理的3个组件传递到字典中,以便它们会被稀疏占位符捕获:

train_dict = {images: (batch['indices'], batch['values'], batch['shape']), etc...}
sess.run(train_step, feed_dict=train_dict)                

如果您不需要批处理,只需省略第一个维度并从占位符形状中删除“none”。
我找不到以稀疏矩阵数组的形式传递图像的方法。只有当我创建第四个维度时才起作用。我很想知道其他替代方案。
虽然这不能给出您问题的确切答案,但希望对您有所帮助,因为我也遇到了类似的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接