Есть ли способ вывести разреженный тензор с помощью tf.keras? - PullRequest
0 голосов
/ 18 марта 2020

Я бы хотел обучить модель для сегментации c, так что тензор вывода содержит много нулей. Я создал набор данных tf.data, который возвращает разреженный тензор тензорного потока, содержащий выходные маски, чтобы он потреблял меньше оперативной памяти во время обучения, но когда я пробую tf.keras.fit, я получаю

TypeError: Failed to convert object of type <class 'tensorflow.python.framework.sparse_tensor.SparseTensor'> to Tensor. Contents: SparseTensor(indices=Tensor("cond_2/Identity_1:0", shape=(None, 4), dtype=int64, device=/job:localhost/replica:0/task:0/device:GPU:0), values=Tensor("cond_2/Identity_2:0", shape=(None,), dtype=float32, device=/job:localhost/replica:0/task:0/device:GPU:0), dense_shape=Tensor("stack:0", shape=(4,), dtype=int64, device=/job:localhost/replica:0/task:0/device:GPU:0)). Consider casting elements to a supported type.

Я пытался использовать tf.sparse операции в потере отладки, как это

def test_loss(y_true, y_pred):
    return tf.sparse.reduce_sum(y_true) - tf.sparse.reduce_sum(y_pred)

, но ошибка теперь

AttributeError: 'Tensor' object has no attribute 'indices'

Я предполагаю, что выходные данные модели должны быть объектом Tensor, и эта ошибка происходит при компиляции модель. Есть ли способ заставить выход модели tf.keras быть разреженным тензором?

1 Ответ

0 голосов
/ 20 марта 2020

Пожалуйста, обратитесь к примеру кода, чтобы преобразовать тензор в разреженный тензор

import numpy as np
import tensorflow as tf

# Make a tensor from a constant
a = np.reshape(np.arange(24), (3, 4, 2))
a_t = tf.constant(a)
# Find indices where the tensor is not zero
idx = tf.where(tf.not_equal(a_t, 0))
# Make the sparse tensor
# Use tf.shape(a_t, out_type=tf.int64) instead of a_t.get_shape()
# if tensor shape is dynamic
sparse = tf.SparseTensor(idx, tf.gather_nd(a_t, idx), a_t.get_shape())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...