Я пытался реализовать пул пространственной пирамиды (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, я получаю тензор. Как я могу использовать этот тензор для создания нужного мне размера, шагов и отступов?