Перемешать каналы в Керасе с неизвестной формой ввода - PullRequest
0 голосов
/ 07 апреля 2019

Я пытаюсь реализовать нечто подобное функции ShuffleNet channel_shuffle, см. ShuffleNet в Керасе. Функция выглядит так:

def channel_shuffle(x, groups):
"""
Parameters
----------
x:
    Input tensor of with `channels_last` data format
groups: int
    number of groups per channel
Returns
-------
    channel shuffled output tensor
Examples
--------
Example for a 1D Array with 3 groups
>>> d = np.array([0,1,2,3,4,5,6,7,8])
>>> x = np.reshape(d, (3,3))
>>> x = np.transpose(x, [1,0])
>>> x = np.reshape(x, (9,))
'[0 1 2 3 4 5 6 7 8] --> [0 3 6 1 4 7 2 5 8]'
"""
height, width, in_channels = x.shape.as_list()[1:]
channels_per_group = in_channels // groups

x = K.reshape(x, [-1, height, width, groups, channels_per_group])
x = K.permute_dimensions(x, (0, 1, 2, 4, 3))  # transpose
x = K.reshape(x, [-1, height, width, in_channels])

return x

Это работает, когда форма входа сети известна, например (256, 256, 3). Но если я попытаюсь изменить его на (Нет, Нет, 3), чтобы включить изображения разных размеров, он сломается. Это потому, что изменить форму x невозможно, так как высота и ширина - None. У меня вопрос: возможно ли изменить эту функцию, чтобы включить эту функцию, и если да, то как?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...