2016-10-26 1 views
0

метод разреженного тензора.shape возвращает тензорный объект, который, как представляется, бесполезен для извлечения фактической формы разреженного тензора, не прибегая к функции запуска.форма разреженного тензора без вызова run()

Для того, чтобы уточнить, что я имею в виду, сначала рассмотрим разреженный тензор:

а = tf.SparseTensor (индексы = [[0, 0, 0], [1, 2, 1]], значения = [1,0 + 2j, 2,0], форма = [3, 4, 2])

a.shape возвращается:

tf.Tensor 'SparseTensor_1/форма: 0' = форма (3,) DTYPE = int64

Это бесполезно.

Теперь рассмотрим плотный тензор:

а = tf.constant (np.random.normal (0,0, 1,0, (4, 4)) astype (DTYPE = np.complex128).)

a.get_shape() возвращает: TensorShape ([Размер (4), Dimension (4)])

я могу использовать этот выход и бросить его в список или кортеж целых чисел никогда не вызывая бег(). Тем не менее, я не могу сделать то же самое для разреженного тензора, если только сначала не преобразовать разреженный тензор в плотный (который еще не реализован для сложного разреженного тензора), а затем вызвать метод get_shape() на нем, но это своего рода избыточность, побеждает цель использования разреженного тензора в первую очередь, а также приводит к ошибке по дороге, если входной разреженный тензор является сложным.

Есть ли способ получить форму разреженного тензора без вызова run() или сначала преобразовать его в плотный тензор?

+0

привет КЭД, есть ли у вас пример, где вы хотите использовать форму вашего разреженного тензора? Я полагаю, что это для определения оператора или переменной Tensorflow? – Corentin

ответ

0

tf.SparseTensor выполнен в виде тройки плотных тензоров под капотом. shape SparseTensor - это всего лишь тензор; если вы хотите знать его значение, лучше всего, чтобы оценить его с помощью session.run:

print(sess.run(a.shape)) 

В общем, Tensorflow не обещает вычислить точную форму даже для плотных тензоров на время график строительства; формы являются лучшими усилиями и могут даже не иметь фиксированного значения. Поэтому даже для плотного тензора вам, возможно, придется оценить Тензор, используя run, чтобы получить точную форму.

Смежные вопросы