2016-10-31 5 views
0

Можно ли получить элемент из тензора по заданному индексу, чтобы получить скаляр? Например, с учетом изображения я могу получить его форму с shape = tf.shape(image), но как я могу получить его высоту, ширину и глубину?Индексирование 1D-тензора в тензорном потоке

Единственный способ я нашел следующее:

height = tf.reshape(tf.slice(shape, [0], [1]), []) 
width = tf.reshape(tf.slice(shape, [1], [1]), []) 
depth = tf.reshape(tf.slice(shape, [2], [1]), []) 

Есть ли другой способ?

ответ

1

Синтаксис ломтика (т.е. с помощью оператора []) основан на NumPy нарезку, и дает немного более лаконичный способ получения высота, ширина и глубина от тензора shape:

shape = tf.shape(image) 
height = shape[0] # returns a scalar 
width = shape[1] # returns a scalar 
depth = shape[2] # returns a scalar 

Nessuno's answer также будет работать хорошо, если тензор имеет статический д выдержанная форма. Тем не менее изображения с переменным размером (например, результат tf.image.decode_jpeg()) обычно дают None для размеров высоты и ширины, когда вы используете get_shape(), поскольку они могут отличаться от одного изображения к другому.

0

Использование tf.Variable.get_shape(variable).

image = tf.Variable([ [ [1,2,3],[3,4,4],[1,1,1] ], [[1,2,3],[3,4,4],[1,1,1] ]]) 
shape = image.get_shape() 
print([shape[i].value for i in range(len(shape))]) 

Выходы:

[2, 3, 3]

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