Опустить размерность тензора в Tensorflow

1

У меня есть тензор, который имеет форму (50, 100, 1, 512) и я хочу изменить его или удалить третье измерение, чтобы новый тензор имел форму (50, 100, 512).

Я попытался tf.slice с tf.squeeze:

a = tf.slice(a, [50, 100, 1, 512], [50, 100, 1, 512])
b = tf.squeeze(a)

Кажется, все работает, когда я пытался напечатать форму a и b но когда я начал тренировать свою модель, эта ошибка появилась

tensorflow.python.framework.errors_impl.InvalidArgumentError: Expected size[0] in [0, 0], but got 50
     [[Node: Slice = Slice[Index=DT_INT32, T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"](MaxPool_2, Slice/begin, Slice/size)]]

Есть ли проблемы с моим slice. Как я могу это исправить. Спасибо

  • 1
    Вы пробовали .reshape ()? Также размер имеет какое-либо значение? Было бы неразумно нарезать данные, которые необходимы. Не практика, которую я видел раньше.
  • 0
    @Kenpachi: я не пробовал .reshape (), но это измерение не важно, поэтому я хотел его отбросить.
Теги:
tensorflow
tensor
slice

3 ответа

2
Лучший ответ

Обычно tf.squeeze размеры.

a = tf.constant([[[1,2,3],[3,4,5]]])

Вышеуказанная тензорная форма равна [1,2,3]. После выполнения операции сжатия,

b = tf.squeeze(a)

Теперь форма тензора [2,3]

1

Существует несколько способов сделать это. Tensorflow начал поддерживать индексирование. Пытаться

a = a[:,:,0,:]

ИЛИ ЖЕ

a = a[:,:,-1,:]

ИЛИ ЖЕ

a = tf.reshape(a,[50,100,512])

0

В этом случае я неправильно использую tf.slice, он должен выглядеть следующим образом:

a = tf.slice(a, [0, 0, 0, 0], [50, 100, 1, 512])
b = tf.squeeze(a)

Вы можете узнать, почему, посмотрев документацию tf.slice

  • 0
    Зачем вообще использовать slice ? Простое использование squeeze должно сделать эту работу.
  • 0
    @ xdurch0 Я думал, squeeze только удалить тусклый с размером = 1

Ещё вопросы

Сообщество Overcoder
Наверх
Меню