Keras: пропустить соединения между непоследовательными слоями - PullRequest
0 голосов
/ 20 сентября 2019

Я хочу реализовать Keras Wrapper, который изменяет слой так, что обычная последовательность ResNet

x_{k+1} = x_k + f(x_k)

, где f - слой, станет

x_{k+1} = g(x_{k-1}) + x_k + f(x_k)

Для обычного развития ResNet я знаю, как это сделать.Это будет выглядеть примерно так:

class Residual(Wrapper):

    def call(self, x):
        layer_output = self.layer.call(x)
        output = tf.math.add(x, layer_output)
        return output

Однако x_{k-1} необходим не только для вывода последнего, но и для переднего слоя.Я не уверен, что это правильный способ сделать это.Остаточная оболочка будет называться так:

layer_2 = Residual(Dense(28**2,input_shape=input_shape))(layer_1)

Для другой оболочки, которая будет называться Residual2, которую я пробовал:

layer_2 = Residual2(Dense(28**2,input_shape=input_shape))([layer_1,layer_0])

Я получаю следующее исключение;

ValueError: Слой Laplace ожидает 1 вход, но он получил 2 входных тензора.Полученные входные данные: [<tf.Tensor 'dense/BiasAdd:0' shape=(?, 784) dtype=float32>, <tf.Tensor 'dense/BiasAdd:0' shape=(?, 784) dtype=float32>]

Я устал отлаживать, изучая оригинальный код keras, но я не настолько опытный программист, что это действительно куда-то ведет.Похоже, я не знаю, как правильно установить входные размеры моего Wrapper.Может кто-нибудь объяснить, как правильно это сделать?

Спасибо за ваше время

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