【问题标题】:In Tensorflow, how to pass more than one SparseTensor to sess.run()在 Tensorflow 中,如何将多个 SparseTensor 传递给 sess.run()
【发布时间】:2017-10-31 00:37:26
【问题描述】:

我有一个非常稀疏的数据集,由于内存限制,我不得不以稀疏的方式表示它们。因此,我正在考虑使用tf.sparse_placeholdertf.SparseTensorValue

我需要传递给计算图,不止一个tf.SparseTensorValue。但是,我收到以下错误: ValueError: setting an array element with a sequence.

这是重现上述意图和错误的最小代码 sn-p。

import tensorflow as tf
import numpy as np

x = tf.sparse_placeholder(tf.float32)
y = tf.sparse_reduce_sum(x)


with tf.Session() as sess:
    indices = np.array([[3, 2, 0], [4, 5, 1]], dtype=np.int64)
    values = np.array([1.0, 2.0], dtype=np.float32)
    shape = np.array([7, 9, 2], dtype=np.int64)

    xs = list()
    xs.append(tf.SparseTensorValue(indices, values, shape))
    xs.append(tf.SparseTensorValue(indices, values, shape))

    print(sess.run(y, feed_dict={x: xs }))

【问题讨论】:

    标签: tensorflow sparse-matrix


    【解决方案1】:

    一个 sparse_placeholder 只能输入一个稀疏张量。如果要输入多个,则需要构建一个稀疏张量,该张量对应于原始输入张量的堆叠版本。

    例如以下应该可以工作:

    x0 = tf.sparse_placeholder(tf.float32)
    x1 = tf.sparse_placeholder(tf.float32)
    x = tf.sparse_concat(axis=0, sp_inputs=[x0, x1])
    y = tf.sparse_reduce_sum(x)
    with tf.Session() as sess:
      indices = np.array([[3, 2, 0], [4, 5, 1]], dtype=np.int64)
      values = np.array([1.0, 2.0], dtype=np.float32)
      shape = np.array([7, 9, 2], dtype=np.int64)
    
      sp = tf.SparseTensorValue(indices, values, shape)
      print(sess.run(y, feed_dict={x0: sp, x1: sp }))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-27
      • 2023-01-03
      • 2019-07-10
      • 2011-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多