Внедрение Гиперосетей в Керасе - PullRequest
0 голосов
/ 04 марта 2019

Я хочу реализовать Гиперсеть , поэтому сеть B, которая создает весовые коэффициенты для другой сети A.Таким образом, сеть A выполняет свертку, но вместо использования своих собственных весов она принимает выходные данные сети B.B создает разные веса для каждого входа.

Я думал об использовании лямбда-слоя и просто определил функцию следующим образом:

def conv2d(tensors):
    import keras.backend as K
    image_tensor, template_tensor = tensors
    template_tensor = K.expand_dims(template_tensor, -1)  # kernel must be of shape (k1, k2, in_channel, out_channel)
    return K.conv2d(image_tensor, template_tensor, padding="same")

Проблема заключается в размерности пакета.template_tensor имеет форму [None, kernel_1, kernel_2, in_channels, out_channels], но K.conv2d ожидает ядро ​​с формой [kernel_1, kernel_2, in_channels, out_channels].

Так что было бы хорошо иметь что-то вроде этого:

def conv2d(tensors):
    import keras.backend as K
    image_tensor, template_tensor = tensors
    template_tensor = K.expand_dims(template_tensor, -1)  # kernel must be of shape (k1, k2, in_channel, out_channel)

    out_tensor = np.zeros_like(image_tensor)
    for i in template_tensor.shape[0]:
        out_tensor[i] = conv2d(image_tensor[i], template_tensor[i], padding="same") 


    return out_tensor

или реализовать еголюбым другим способом (например, в качестве слоя).

Спасибо

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