Пространственное пирамидальное объединение - ошибка размера ввода (? - нет) - PullRequest
0 голосов
/ 14 мая 2018

Я пытался реализовать пул пространственной пирамиды (https://arxiv.org/abs/1406.4729),, но у меня возникла проблема с размером ввода.

Мой вход имеет форму (batch_size, None, n_feature_maps)) и у меня есть следующий код:

self.y_conv_unstacked = tf.unstack(self.conv_output, axis=0)
    self.y_maxpool = []
    for tensor in self.y_conv_unstacked:
        for size_pool in self.out_pool_size:
            self.w_strd = self.w_size = math.ceil(float(tensor.get_shape()[1]) / size_pool)
            self.pad_w = int(size_pool * self.w_size - tensor.get_shape()[1])
            self.padded_tensor = tf.pad(tensor, tf.constant([[0, 0], [0, 0], [0, self.pad_w], [0, 0]]))
            self.max_pool = tf.nn.max_pool(self.padded_tensor, ksize=[1, 1, self.w_size, 1], strides=[1, 1, self.w_strd, 1], padding='SAME')
            self.spp_tensor = tf.concat([self.spp_tensor, tf.reshape(self.max_pool, [1, size_pool, self.n_fm1])], axis=1)
        self.y_maxpool.append(spp_tensor)

Поскольку входные данные в пакете имеют разные размеры, я распаковываю их и объединяю каждый тензор по отдельности. Однако при использовании tenor.get_shape () [1] этовозвращает «?». Если я использую tennor.get_shape (). as_list () [1], он возвращает None.

Я хотел бы знать, как я могу обойти этот неопределенный размер. Можно ли получитьформа тензора во время выполнения?

Редактировать: Используя tf.shape, я получаю тензор. Как я могу использовать этот тензор для создания нужного мне размера, шагов и отступов?

1 Ответ

0 голосов
/ 14 мая 2018

Я хотел бы знать, как я могу обойти этот неопределенный размер. Это можно получить тензорную форму во время выполнения?

Используйте tf.shape() op для получения динамической формы тензора вместо x.get_shape(), который возвращает статическую форму x.

Это подробно объясняется здесь .

В приведенном выше коде заменить tensor.get_shape()[1] на tf.shape(tensor)[1]

...