使用稀疏张量为 TensorFlow 中的 softmax 层提供占位符

Posted

技术标签:

【中文标题】使用稀疏张量为 TensorFlow 中的 softmax 层提供占位符【英文标题】:Using Sparse Tensors to feed a placeholder for a softmax layer in TensorFlow 【发布时间】:2016-02-28 06:30:11 【问题描述】:

有没有人尝试过使用稀疏张量和 TensorFlow 进行文本分析并取得成功?一切准备就绪,我设法在 tf.Session 中为带有 numpy 数组的 Softmax 层提供 feed_dict,但我无法使用 SparseTensorValues 提供字典。

我还没有找到关于使用稀疏矩阵来训练带有 Tensor Flow 的模型(例如 softmax)的文档,这很奇怪,因为类 SparseTensorSparseTensorValuesTensorFlow.sparse_to_dense 方法已经准备好了,但是没有关于如何在 session.run(fetches,feed_dict=None) 方法中提供 feed_dict 值字典的文档。

非常感谢,

【问题讨论】:

我面临同样的问题并提出问题。你可以按照这个,但我认为还没有解决.. github.com/tensorflow/tensorflow/issues/342 Ebrevdo 建议使用 embedding_lookup_sparse 做稀疏乘法。我个人认为 tensorflow 现在支持有限的稀疏操作.. 【参考方案1】:

我找到了一种将稀疏图像放入 tensorflow 的方法,包括批处理(如果有帮助的话)。

我在字典中创建了一个 4-d 稀疏矩阵,其中维度为 batchSize、xLen、ylen、zLen(例如,zLen 为 3 表示颜色)。以下伪代码适用于一批 50 个 32x96 像素的 3 色图像。值是每个像素的强度。在下面的 sn-p 中,我显示了正在初始化的第一批的前 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])

使用了“无”,因此我可以改变批量大小。

当我第一次想使用图像时,例如为了输入批量卷积,我将它们转换回密集张量:

images = tf.sparse_tensor_to_dense(batch) 

然后当我准备好运行会话时,例如为了训练,我将批次的 3 个组件传递到字典中,以便它们被 sparse_placeholder 拾取:

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

如果您不需要进行批处理,只需离开第一个维度并从占位符形状中删除“无”。

我找不到将图像作为稀疏矩阵数组批量传递的任何方法。只有在我创建了第四维时它才有效。我很想知道替代方案。

虽然这并不能准确回答您的问题,但我希望它对我有用,因为我一直在努力解决类似的问题。

【讨论】:

以上是关于使用稀疏张量为 TensorFlow 中的 softmax 层提供占位符的主要内容,如果未能解决你的问题,请参考以下文章

张量流中的稀疏自动编码器成本函数

[TensorFlow系列-5]:TensorFlow基础 - 稀疏张量与其创建方法

Tensorflow(4) 张量属性:维数、形状、数据类型

Keras Tensorflow 中的切片张量

R中的多维稀疏数组(3路张量)

在python中怎样将rdf转化为稀疏张量