2016-02-11 3 views
1

Я пытаюсь разрезать четырехмерный тензор с помощью оператора tf.slice() следующим образом:Как отрезать ранг 4 тензора в TensorFlow?

x_image = tf.reshape(x, [-1,28,28,1], name='Images_2D') 
slice_im = tf.slice(x_image,[0,2,2],[1, 24, 24]) 

Однако, когда я пытаюсь запустить этот код, я получаю следующее исключение:

raise ValueError("Shape %s must have rank %d" % (self, rank)) 

ValueError: Shape TensorShape([Dimension(None), Dimension(28), Dimension(28), Dimension(1)]) must have rank 3 

Как я могу нарезать этот тензор?

+0

@mrry Благодарим за вопрос более точный. – Shaban

ответ

7

tf.slice(input, begin, size) оператор требует, чтобы begin и size векторы — которые определяют subtensor, чтобы быть нарезаны — иметь такую ​​же длину, что и количество измерений в input. Поэтому, чтобы разрезать четырехмерный тензор, вы должны передать вектор (или список) из четырех чисел в качестве второго и третьего аргументов tf.slice().

Например:

x_image = tf.reshape(x, [-1, 28, 28, 1], name='Images_2D') 

slice_im = tf.slice(x_image, [0, 2, 2, 0], [1, 24, 24, 1]) 

# Or, using the indexing operator: 
slice_im = x_image[0:1, 2:26, 2:26, :] 

Оператор индексации немного более мощным, так как он может также уменьшить ранг вывода, если для измерения указывается одно целое, а не диапазон:

slice_im = x_image[0:1, 2:26, 2:26, :] 
print slice_im_2d.get_shape() # ==> [1, 24, 24, 1] 

slice_im_2d = x_image[0, 2:26, 2:26, 0] 
print slice_im_2d.get_shape() # ==> [24, 24] 
+0

Есть ли способ срезать и поддерживать измерение «Нет»? Другими словами, что-то вроде: 'tf.slice (x_image, [-1, 2, 2, 0], [1, 24, 24, 1])' –

+1

Да, вы можете передать -1 как один из элементов аргумент 'sizes' для' tf.slice() '. Оператор индексирования TensorFlow недавно был обновлен, чтобы поддерживать больше определений нарезки в стиле NumPy, поэтому вам может быть проще определить срез таким образом (например, он поддерживает «неизвестные» начальные позиции). – mrry

+0

не проблематично, что начальный индекс все еще равен 0? –

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