Опустить размерность тензора в Tensorflow - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть тензор, имеющий форму (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.Как я могу это исправить.Спасибо

Ответы [ 3 ]

0 голосов
/ 22 сентября 2018

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

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

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

0 голосов
/ 22 сентября 2018

Обычно tf.squeeze уменьшит размеры.

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

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

b = tf.squeeze(a)

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

0 голосов
/ 22 сентября 2018

Есть несколько способов сделать это.Tensorflow начал поддерживать индексацию.Попробуйте

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

ИЛИ

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

ИЛИ

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

...