我想实现一个Keras包装器,该包装器可以修改一层以使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代码的调试工作,但是我不是一个经验丰富的程序员,因此这确实是一个领先的地方。看来,我不知道如何正确设置包装机的输入尺寸。有人可以解释如何正确执行此操作吗?
感谢您的时间