Почему мой разреженный тензор не может быть преобразован в тензор? - PullRequest
0 голосов
/ 06 ноября 2018

Я хочу передать свои разреженные данные в Tensorflow партиями, поэтому я использую этот код:

with graph.as_default():
    global_step = tf.Variable(0, trainable=False)
    # Here we use the indices and values to reproduce the input SparseTensor
    sp_indice = tf.placeholder(tf.int64)
    sp_value = tf.placeholder(tf.float32)
    x =  tf.SparseTensor(sp_indice, sp_value, [batch_size, feature_num])
    y_ = tf.placeholder(tf.float32, [None, 1])
    keep_prob = tf.placeholder("float32")
    W = tf.Variable(tf.zeros([feature_num, 1]))
    b = tf.Variable(tf.zeros([1]))

    # Construct model
    pred = tf.nn.softmax(tf.matmul(x, W) + b) # Softmax
    # Minimize error using cross entropy
    cost = tf.reduce_mean(-tf.reduce_sum(y*tf.log(pred), reduction_indices=1))

Но я получил ошибку:

TypeError: Failed to convert object of type <class 'tensorflow.python.framework.sparse_tensor.SparseTensor'> to Tensor. Contents: SparseTensor(indices=Tensor("Placeholder:0", dtype=int64), values=Tensor("Placeholder_1:0", dtype=float32), dense_shape=Tensor("SparseTensor/dense_shape:0", shape=(2,), dtype=int64)). Consider casting elements to a supported type.

Я запутался в этой ошибке, похоже, что мой sp_indice = tf.placeholder(tf.int64) был не прав, возможно, потому что я не дал shape. Но я не могу убедиться, что форма, так как форма отличается в каждой партии. Как я могу доставить индексный массив и массив значений в тензор?

1 Ответ

0 голосов
/ 06 ноября 2018

Когда вы выполняете матричное умножение разреженного тензора, вам нужно использовать tf.sparse_tensor_dense_matmul.

pred = tf.nn.softmax(tf.sparse_tensor_dense_matmul(x, W) + b)
...