取决于Keras全卷积NN中可变层输入尺寸的损耗

时间:2018-08-20 20:23:28

标签: python tensorflow keras conv-neural-network

要实现Concrete DropoutKeras implementation定义了一个包装器层,该包装器会给要包装的层增加损耗。损耗取决于输入尺寸。我的问题如下:我希望包装2D卷积层,但是网络是完全卷积的,并且对于不同的图像(例如形状(None,None,None,256)),输入大小可能不同,这意味着build()函数的包装器不再起作用:

def build(self, input_shape=None):
    self.input_spec = InputSpec(shape=input_shape)
    if not self.layer.built:
        self.layer.build(input_shape)
        self.layer.built = True
    super(ConcreteDropout, self).build()
    [...]
    input_dim = np.prod(input_shape[1:])  # <-- Problem occurs here, 
                                          # input_shape := (None, None, None, 256)
    [...] 
    self.layer.add_loss(regularizer)      # where regularizer depends on input_dim

我尝试使用self.layer.input和self.layer.input_shape在运行时获取输入形状,但这会产生类似错误的信息

*** AttributeError: Layer pyramid_classification_0 is not connected, no input to return.

有什么方法可以使它适用于可变的输入大小?

0 个答案:

没有答案